Ruby :: Converting between Strings and Symbols

Posted by PunNeng, Tue May 22 03:10:00 UTC 2007

เล่นกับ symbol หน่อย อยากจะใช้ symbol เป็นตัวระบุอะไรบางอย่าง ใน ruby จะทำไง มาเล่นกันหน่อย

ทำได้ไม่ยาก เพียงแต่ใช้ Symbol#to_s หรือ Symbol#id2name ก็จะแปลง symbol ไปเป็น String หรือแปลงกลับ โดยการใช้ String#to_sym หรือ String.intern ตัวอย่าง

  1
  2
  3
  4
:symbol.to_s             # => "symbol"
:symbol.id2name          # => "symbol"
"symbol".to_sym          # => :symbol
"symbol".intern          # => :symbol

ข้อดีของ symbol อยู่ตรงที่มันไม่เปลืองหน่วยความจำและประหยัดเวลา ลองนี่ดู

  1
  2
  3
  4
"symbol".object_id       # => 23211108
"symbol".object_id       # => 23207142
:symbol.object_id        # => 3041550
:symbol.object_id        # => 3041550

ใช้ object_id ในการเรียกค่าอ้างอิง เราจะได้ค่าอ้างอิงจาก string สองค่า ที่ไม่ซ้ำกัน นั่นหมายความว่า มันย้ายหน่วยความจำไปอีกที่นึง และเราจะได้ค่าอ้างอิงจาก symbol เพียงค่าเดียว ประหยัดทั้งหน่วยความจำ และเวลา

แล้วเราจะใช้ string ทำอะไรล่ะ ==' เมื่อมี symbol แล้ว แน่นอน ว่า string ทำอะไรได้เยอะกว่า symbol แน่นอน แล้วจะดูยังไงว่าเมื่อไหร่ จะใช้ symbol หรือ string ?? ง่ายๆ เลย

  • ถ้าข้อมูลสำคัญ ใช้ string
  • ถ้าต้องการระบุอะไรบางอย่าง ก็ใช้ symbol

ทีนี้ flag ต่างๆ นานา ที่เราแค่ทำบันทึกค่าไว้ อาจจะเอามาแค่เปรียบเทียบกัน ก็ใช้ symbol เอาดีกว่า

  1
  2
  3
flag1 = :complete
flag2 = :complete
puts "done" if flag1 == flag2      # => done

เย่ๆ

ปล. ชาว Flash เตรียมตัวเมามันกับ ActionScript 3.0 ได้แล้ว :)

Filed Under: Ruby | Tags: howto ruby string

Comments

Have your say

A name is required. You may use HTML in your comments.




codegent: we're hiring