Ruby 裡的 Symbol

什麼是符號

在 Ruby 中什麼東西幾乎都是物件 , 那符號其實就是 有名字的物件(an object with a name)

對於字串來說像是 “8======3” 這是一個字串物件

irb(main):001:0 "8======3".class
String

對於 0 這是一個數字物件

irb(main):002:0 0.class
Integer

:handsome 這是一個符號物件

irb(main):003:0 :handsome.class
Symbol

不過要注意的是,符號不是一個變數就只是一個值而已

irb(main):004:0  :ruby
:ruby

irb(main):005:0  1
1

這裡的1並不是變數,就是個值所以當我打出1的時候就給我1的值,當我打出:ruby就給我:ruby

所以當用下面這種寫法的時候,就會爆出語法錯誤

原因是左邊的 :ruby 是一個值,右邊又是一個值

irb(main):006:0  :ruby = "Emerald"

SyntaxError ((irb):6: syntax error, unexpected '=', expecting end-of-input)
:ruby = "Emerald"
      ^

應該要左邊是變數去接右邊的值

irb(main):007:0  ruby = :ruby
:ruby

irb(main):008:0  love = :alice
:alice

所以符號不是變數,就只是一個值或是說物件

另外可以使用 .to_sym / .intern 來字串轉符號
或是用 .to_s / .id2name來符號轉字串

irb(main):009:0  "alice".to_sym
:alice

irb(main):010:0  "alice".intern
:alice

irb(main):011:0  :alice.to_s
"alice"

irb(main):012:0  :alice.id2name
"alice"

留言

這個網誌中的熱門文章

Ruby Const_defined?