ในบทความนี้ คุณจะได้เรียนรู้ว่าเมธอด inspect ของ Ruby ทำงานอย่างไร และทำไมเราจึงใช้มัน
เมื่อคุณพิมพ์สตริงหรืออาร์เรย์ คุณจะเห็นเนื้อหาของมัน
ตัวอย่าง:
puts [1,2,3] 1 2 3
แตเมื่อคุณพิมพ์ออบเจ็กต์ของตัวเอง...
คุณเห็นนี้:
#<Cat:0x29458e0>
ทำไม?
เพราะคุณยังไม่ได้บอก Ruby ว่าให้แสดงคลาสนี้อย่างไรให้มีความหมาย
คุณสามารถเปลี่ยนได้หากคุณกำหนดเมธอดอย่าง to_s
มา看看ว่ามันทำงานอย่างไร!
การ Implement to_s
เมื่อคุณใช้ puts กับออบเจ็กต์ Ruby จะเรียกเมธอด to_s เพื่อรับการแสดงผลแบบสตริงของออบเจ็กต์
โดยค่าเริ่มต้นคุณได้ชื่อคลาส (Cat)...
บวกกับตัวเลขบางตัวที่แทน object_id ในรูปแบบ hexadecimal (0x29458e0)
นี่คือวิธีเปลี่ยน:
class Cat
def to_s
"I'm a cat"
end
end
puts Cat.new # "I'm a cat"
ถ้าคลาสของคุณมีตัวแปรอินสแตนซ์ คุณสามารถทำให้มันเป็นส่วนหนึ่งของคำอธิบายออบเจ็กต์
เช่นนี้:
class Cat
attr_reader :color
def initialize(color)
@color = color
end
def to_s
"I'm a #{color} cat"
end
end
puts Cat.new("blue") # "I'm a blue cat"
puts Cat.new("white") # "I'm a white cat"
ตอนนี้เมื่อคุณพิมพ์ออบเจ็กต์นี้ คุณจะเห็นข้อมูลที่มีประโยชน์มากขึ้น
เยี่ยมใช่ไหม?
เมธอด Inspect ของ Ruby
คุณสามารถแทนออบเจ็กต์ได้สองวิธี
แรก:
ใช้ to_s
นี่คือสิ่งที่คุณต้องการให้ผู้ใช้เห็นเมื่อแสดงออบเจ็กต์
ตัวอย่าง ด้วยออบเจ็กต์เวลา คุณจะแสดงเวลาในแบบที่เข้าใจง่าย (2018-12-28 19:17:28) แทนที่จะแสดงวิธีที่เวลาถูกเก็บจริง (1546021067)
ต่อมา:
คุณสามารถ inspect ออบเจ็กต์ได้ นี่ให้เวอร์ชันดิบ (raw version) ของออบเจ็กต์มากขึ้น
ความต่างคืออะไร?
- กำหนด
to_sเพื่อให้เมื่อใช้ puts จะแสดงมุมมองเฉพาะของออบเจ็กต์นี้ - กำหนด
inspectเพื่อช่วยตัวคุณและนักพัฒนาคนอื่นในการดีบัก (debugging)
ตัวอย่าง:
"abc".inspect
แสดงเป็น:
"abc"
Inspect เก็บเครื่องหมายคำพูด และอักขระพิเศษ (เช่น \n สำหรับบรรทัดใหม่) จะมองเห็นได้
ส่วนที่ดีที่สุด?
คุณสามารถ implement เมธอด inspect ในคลาสของตัวเองได้ 🙂
วิธีทำ:
class Cat
attr_reader :color
def inspect
"Cat - id: #{object_id} - color: #{color}"
end
end
Cat.new("white").inspect # "Cat - id: 23316588 - color: white"
นั่นคือวิธีที่คุณสร้างออบเจ็กต์ที่อธิบายตัวเองได้!
วิดีโอสอน
สรุป
คุณได้เรียนรู้วิธีใช้เมธอด inspect และ to_s ของ Ruby เพื่อสร้างคลาสที่ดีขึ้น!
ถ้าคุณชอบบทความนี้ กรุณาแชร์เพื่อให้คนอื่นหาเจอ
ขอบคุณที่อ่านครับ