在字元前面加上冒號(:),形成的型態就是符號,
其實我們可以想像,符號就是一個有名字的物件。
例如:
:hello
:name
(1)與變數的差異:變數通常是指定(=)在某個物件的名稱,
而符號指的就是某個物件(且這個物件還帶有一個名字)。
例如:
name = "Arance" 和 :name = "Arance"
當沒有指定name變數為Arance時,
印出name是沒有辦法的事。
但沒有指定:name符號為Arance時,
印出:name可以使用,但因為還沒指定會得到nil。
所以在沒有指定時,變數是不能單獨存在的。
(2)與字串的差異:大部分字串可以使用的方法,
符號都可以使用,符號本身的是不能修改的,因為符號就是一個有名字的物件。
例如:
"Arance"[0] = "B" 可以修改為B字母,
但:Arance[0] = "B”是沒辦法使用的。
在效能上,每當產生一個新的字串就需要用一塊記憶體來存取,
然而如果使用符號,不會額外增加暫存記憶體的容量,
會直接在記憶體的部分將符號所存取的東西直接拿出來,
相對而言記憶體節省,而效能也比較好。
例如:
在Ruby裡面藉由object_id,可以得知物件的id,當使用
puts :Arance.object_id
無論重複印幾次,藉由符號所印出來的object_id均為相同。
但若使用puts "Arance".object_id
無論印多少次,字串所印出來的object_id會有所不同,
而會暫時一直減少可用記憶體的空間。
(1)字串轉符號:to_sym
例如: "Arance".to_sym 會得到 :Arance
而如果使用 .intern 和 用%s() 也是同樣的效果。
例如:"Arance".intern 或 %s(Arance)
(2)符號轉字串:to_s
例如: :Arance.to_s 會得到 "Arance"
而如果使用 .id2name 也是同樣的效果。
例如: :Arance.id2name 會得到 "Arance"
今天比較了符號以及字串的差別,而符號存在於雜湊(Hash)裡面的鍵(key)內。
相對來說的確字串的方法比較多,但符號比較可以節省記憶體的空間,
而也可以藉由字串以及符號的功能相互轉換。