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

เชี่ยวชาญ Ruby super Keyword: เรียก Parent Methods ได้อย่างมีประสิทธิภาพ

คีย์เวิร์ด super ใน Ruby ทำอะไร?

มันเรียกเมธอดบน parent class ที่มีชื่อเดียวกับเมธอดที่เรียก super

ตัวอย่าง:

หากคุณเรียกเมธอดชื่อ i_like_chocolate และเรียก super ภายในเมธอดนั้น Ruby จะพยายามหาอีกเมธอดหนึ่งชื่อเดียวกันบน parent class ของเจ้าของเมธอดนี้

สิ่งนี้ bubble ขึ้นผ่าน class ancestry chain เหมือน regular method call

หากเมธอดไม่มีอยู่ จะ trigger NoMethodError exception และหากเจอ method_missing จะใช้ตัวนั้น

ตอนนี้:

มา看看ตัวอย่างโค้ด!

Super โดยไม่มี Arguments

ในตัวอย่างต่อไป เรามีคลาส Cat สืบทอดจาก Animal

คลาส Cat มีเมธอด name ที่ใช้ super เรียกเมธอดเดียวกันบน parent class (Animal)

โค้ด:

class Animal
  def name
    puts "Animal"
  end
end
class Cat < Animal
  def name
    super
  end
end
cat = Cat.new
cat.name # "Animal"

Ruby super keyword พฤติกรรมต่างออกไปเมื่อใช้พร้อมหรือไม่มี arguments

โดยไม่มี arguments:

มันจะ ส่ง arguments ที่ใช้สำหรับ original method call ไปยังเมธอดใหม่ รวมถึง keyword arguments และ block หากให้

ตัวอย่าง:

def puts(*)
  super
end
puts 1, 2, 3

เมธอดนี้ นิยามนอกคลาส จะเป็นของ Object หมายถึงจะถูกเรียกก่อน puts ต้นฉบับ

ตอนนี้:

เมื่อคุณเรียก puts คุณเรียกเมธอดใหม่ที่เราสร้าง ซึ่งใช้ super เรียก puts ต้นฉบับ

เมื่อไหร่ใช้ Super vs Super()

เราเพิ่ง看看วิธีใช้ super เรียก parent methods

แต ถ้า parent method ไม่รับ arguments จำนวนเท่ากัน?

ในกรณีนั้นคุณใช้:

  • super() สำหรับ no arguments
  • super(arg1, arg2, ...) เพื่อเลือก arguments ที่อยากส่ง

ตัวอย่าง:

def puts
  super()
end

สังเกตว่า parentheses มีความหมายพิเศษที่นี่ ไม่เหมือน regular method call

สิ่งอื่นๆ เกี่ยวกับ super:

  • ใช้ได้เฉพาะภายในเมธอด
  • มันคืนผลลัพธ์จากการเรียก parent method
  • เรียกได้หลายครั้ง

บรรทัด bold (super คืนผลลัพธ์) เป็น key สำคัญในการเข้าใจ uses ของ super ที่คุณอาจพบ

คุณใช้ super implement decorator pattern หรือหากเรียกภายใน initialize ใช้ initialize instance variables บน parent class ได้

สรุป

คุณเรียนรู้เกี่ยวกับ Ruby super keyword คืออะไร และทำงานอย่างไรในสถานการณ์ต่างๆ แล้ว!

หากเพลิดเพลินกับบทความนี้ คุณอาจอยากสมัครรับจดหมายข่าว RubyGuides เพื่อรับเนื้อหาแบบนี้และ Ruby tips อื่นๆ ที่มีเฉพาะผู้สมัคร