แต่เดิม String ในภาษา C, C++ เป็น mutable พอมาใน Java และ C# กลายเป็น immutable พอมาถึง Ruby มันกลับมาเป็น mutable อีกครั้ง ถ้าจะเถียงกันเรื่อง mutable ดีหรือ immutable ดีกว่าคงเถียงกันไม่จบ ใน Ruby เลยมี String เป็น mutable และ Symbols เป็น immutable
เวลาประกาศ Symbol เราจะขึ้นต้นด้วย colon
:a_symbol
:an_other_symbol
:first_name
ชาว Ruby มักใช้มันตอนที่ต้องการแสดงความเป็นตัวชี้ (identifiers) เพราะแน่ใจว่า string ตัวนี้มีอยู่ใน memory แค่ที่เดียว ตัวอย่างการใช้งานเช่น
Food.eat(:all, :by => "hand", :on => "table")
หรือใช้ในคำสั่ง find ของ rails
Employee.find(:all, :conditions => 'name LIKE "Paul%"')
คุณ pphetra อธิบายเกี่ยวกับ Symbol ว่า
Symbol ถือเป็น object พิเศษแบบหนึ่ง นั่นคือ มันจะมีแค่ตัวเดียวเสมอ (ถ้าชื่อเหมือนกัน)
สมมติเราอ้างถึง :a ไป 10 ครั้งใน program
ก็จะมี object symbol :a เกิดขึ้นใน memory แค่ตัวเดียว
แต่ถ้าเราใช้ string ‘a’ 10 ครั้งใน program
ก็จะมี object string ‘a’ เกิดขึ้น 10 ตัวใน memory
แล้วถ้าผมมีโค้ดทำนองนี้ <%= f.text_field :comment%>
:comment แสดงว่าคืออะไรหรอครับ