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 ได้แล้ว :)