菜鳥筆記: Ruby 世界裡的符號(Symbol)是什麼?

王建豪
2 min readJul 27, 2019

--

符號(symbol)在Ruby裡,常見以冒號配文字的形式出現 (譬如是 :name、:"age")。乍看之下,不就是”冒號 + 變數” 或是”冒號 + 字串”嗎? 就是因為外表上蠻相似的,因此容易與”變數”及”字串”混淆。對新手而言,搞懂symbol及正確的使用符號是有難度的。

在這裡我就嘗試說明在Ruby 世界裡的符號(Symbol)是什麼?它跟字串又有何不同? 首先我們先了解在Ruby的世界裡每一個變數、文字、數字都是物件,而symbol也是如此。

" Symbol 其實是有點玄的東西,有些人認為它就是的變數,或就是只是個名字,但事實上它不就是變數或名字這麼簡單,你可以想像它是一個「帶有名字的物件」" from 五倍紅寶石學院

換句話說,數字5也是物件(數字物件),文字"hello"(字串物件),而符號 :name則是(符號物件)。

從另一個角度來看,把"符號"看作值(value)就會容易理解許多。舉例來說,我們會把“變數”=“值”( age = 25),但是不會把”值”指定給”值”(13=25),因為這是很明顯的錯誤。所以符號不能指定給值(:age=25)因為符號就是屬於值。字串也是如此,當理解(25 = “Kevin”)是錯誤的時候,就不難看出(:name = “Kevin”)也是錯誤的了。

另一個不同之處,就是字串的內容可以修改,但是符號不行。我們可以用存取陣列的方式修改字串,但是符號是無法經由任何方法改變的。因為即使是一個字元的改變(打錯字)就會變成是不同的符號了。

--

--

No responses yet