符號(Symbol)可以看做是一個有名字的物件。
符號並不是一個變數而是一個“值”。舉個例子:數字2而就是一個2的值並非變數,符號也是。如果能夠理解符號跟數字很像的話,會更簡單!
p 2#本身就是一個值
p:hello#這個符號的值就是hello
符號也能成為變數的值
名稱=:名稱等於
名稱= 2
但符號不能變成變數,不能將符號指定在等號的左手邊
:name =“ bb”#這樣就錯了其實能理解成
2 =“ bb”
但大家時常可以重置字串和符號替換,這邊就足以一下符號與字串又有某種不同的地方?
- 字串可以改變,但符號不可變
- 符號在程式裡是固定的記憶體位置,和字串不同,字串每一次印出來的記憶體位置都不相同,因此可知符號的效能會比字串好一些些。
p“ name” .object_id#46955469089860但每次都不同
p:name.object_id#88348每次都相同
- 字串可以使用“ [] =“方法改變字串內的內容,符號不行
- 字串與符號能夠互相轉換,使用
to_s
,to_sym
name =“ kk”
p name.to_sym#:kk
p:name.to_s#“ name”
總結一下,如果今天要用的變數是需要進行改變的就要使用字串,如果不可變就可以使用符號。如果將符號理解成數字的話會更容易懂符號的意思!