透過 Ref 得知 Symbols 特性:
- Symbols 不是 "輕量化" 的字串,更像是 ID 之類的東西
- 這個 ID 識別是透過 冒號 " : " 後面接著的文字,所以這個文字重複了,也不會一樣
- 這個 Symbols 比喻為 ID 的依據是 object_id, 每個物件產生之後,物件 id 會不一樣,但 symbols 都是一樣的。
範例:
目前有兩個狀態機來表示目前機器運作情況:
machine_status = :open
當判別到 :open 時,表示機器開機。
當判別到 :closed 時,表示機器關機。
用 String 判斷狀態也可以阿,為何要用 Symbols?
- 要是用字串 "open" ,每次物件都會產生,可能會浪費記憶體。
- Symbols 一經過產生,透過無數次調用,都不會再次產生記憶體。
Symbols 比較 String:
物件 id 是否一致
:hello.object_id == :hello.object_id //true "hello".object_id == "hello".object_id //false
由此可知,字串調用每次都會經過記憶體產生。
就算使用 String 操作,也建議用變數裝著 String ,並重複使用,避免產生過多浪費的記憶體。
Reference:
https://www.ruby-lang.org/zh_tw/documentation/ruby-from-other-languages/
http://www.troubleshooters.com/codecorn/ruby/symbols.htm
http://www.randomhacks.net/2007/01/20/13-ways-of-looking-at-a-ruby-symbol/
http://stackoverflow.com/questions/2341837/understanding-symbols-in-ruby
http://ithelp.ithome.com.tw/articles/10161202
沒有留言:
張貼留言