
符號是什麼?
符號就是一個”有名字的物件” (an object with a name)
123是一個數字物件
“abc”是依字串物件
===> :hello就是一個符號物件
****符號不是變數,他就只是一個值
以下為例,假設設定變數和符號
number = 123 ==>這個可以運行
:number = 123 ==>這個會噴錯

噴錯的原因就在於,符號不是一個變數,如果今天:number可以運作,就代表 “”數字123 = 數字456″”是成立的
因此以下程式碼運作是可以的
“”number = :number”” ==> 這個是可以運作的,他等於 “”number = 123″” => “”變數 = 一個值””
字串跟符號的差別在哪?
字串內容可以修改,但是符號不行
real_name = “JackLee”
real_name[2] = “k”
p real_name會印出 => “KakkLee”
如果換成以下
fake_name = :JohnLee
fake_name [2] = “k”
會直接噴錯

****另外字串的效能會比符號差一點點
ruby有一個語法是object_id ==> 可以印出記憶體位子
1、現在把5個”同樣字串的object_id”,印出來看看,如下圖可以看出都是不同的位子

2、如果現在換成”五個同樣符號的object_id”試試看,看下圖可以發現都是同樣的位子

字串跟符號的記憶體差很多嗎?
早期還沒有修改的時候,字串的記憶體占比反而比符號還小,不過現今修改後,符號比字串的占比還有少一點點點點,差非常的小。
“”freeze.object_id語法”” ==> 此語法可以把字串的記憶體位子冰凍起來,讓同一個字串的ID都會是一樣的(冰起來後,此物件就會像符號一樣,不能再被修改)
ex: p “hello, world”.freeze.object_id
字串轉符號
p “name”.to_sym ==>變成 :name
符號轉字串
p “:name”.to_s ==> 變成name