在Ruby裡面的符號 :Symbol 會在字元前面加上冒號 :
而字串則是用雙引號或單引號 'String' , "String" (這兩種都表示字串)
- 符號是Ruby特殊的型態用途 在資料庫的儲存查詢的過程比起字串有較大的效率優勢。
符號 :symbol
immutable => 不可變動
符號物件一旦寫入資料庫中 除非刪除它否則其是無法被修改的
通常會用來使用在資料庫裡面作為hash裡的key,亦類似身份指稱作用
可把 :symbol 假想為一個空瓶上的名牌
因為如同 ID 獨一無二的存在記憶體內,當需要查詢時比字串的物件速度較快
存取效益高。
每一個 :symbol都有自己的 object_id 且不重複
字串 'string'
mutable => 可變動
被賦值給符號作為變數使用
可將 'string' 設想成空瓶內的物件
每個 'string' 就算長得『 一樣 』都叫做 'banana' 每查詢一次 object_id 卻會印出不一樣的 id ,因此存放在記憶體內被查找的效率比符號低。
:friut = 'banana' #語法錯誤
因為符號物件本身就是其代表意思 不能被賦值
發明 Rake 的工程師 Jim Weirich 曾說 :『 當識別比內容重要時,使用符號。
當內容比識別重要,則使用字串 』。
結論:
當不確定要使用何者,如果確定未來物件的值不會變動,那麼使用符號而非字串。