Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

กำหนดออบเจ็กต์ Ruby ที่อธิบายตัวเองด้วย Custom to_s และ Inspect Methods

ในบทความนี้ คุณจะได้เรียนรู้ว่าเมธอด 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 เพื่อสร้างคลาสที่ดีขึ้น!

ถ้าคุณชอบบทความนี้ กรุณาแชร์เพื่อให้คนอื่นหาเจอ

ขอบคุณที่อ่านครับ