Ruby世界裡的符號(Symbol)是什麼?

CK Yang
2 min readApr 13, 2020

符號(Symbol)可以看做是一個有名字的物件。

符號並不是一個變數而是一個“值”。舉個例子:數字2而就是一個2的值並非變數,符號也是。如果能夠理解符號跟數字很像的話,會更簡單!

p 2#本身就是一個值
p:hello#這個符號的值就是hello

符號也能成為變數的值

名稱=:名稱等於
名稱= 2

但符號不能變成變數,不能將符號指定在等號的左手邊

:name =“ bb”#這樣就錯了其實能理解成
2 =“ bb”

但大家時常可以重置字串和符號替換,這邊就足以一下符號與字串又有某種不同的地方?

  • 字串可以改變,但符號不可變
  • 符號在程式裡是固定的記憶體位置,和字串不同,字串每一次印出來的記憶體位置都不相同,因此可知符號的效能會比字串好一些些。
p“ name” .object_id#46955469089860但每次都不同
p:name.object_id#88348每次都相同
  • 字串可以使用“ [] =“方法改變字串內的內容,符號不行
  • 字串與符號能夠互相轉換,使用to_sto_sym
name =“ kk” 
p name.to_sym#:kk
p:name.to_s#“ name”

總結一下,如果今天要用的變數是需要進行改變的就要使用字串,如果不可變就可以使用符號。如果將符號理解成數字的話會更容易懂符號的意思!

--

--