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

วิธีใช้ทับทิมซุปเปอร์คีย์เวิร์ด

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

มันเรียกเมธอดบนคลาสพาเรนต์ที่มีชื่อเดียวกับเมธอดที่เรียก super .

ตัวอย่างเช่น :

หากคุณเรียกเมธอดชื่อ i_like_chocolate แล้วคุณเรียก super ภายในวิธีการนั้น Ruby จะพยายามค้นหาวิธีอื่นที่มีชื่อเดียวกันนั้นในคลาสพาเรนต์ของใครก็ตามที่เป็นเจ้าของวิธีนี้

สิ่งนี้จะผุดขึ้นอย่างต่อเนื่องผ่านสายบรรพบุรุษของคลาส เหมือนการเรียกเมธอดปกติ .

หากไม่มีวิธีการนี้จะทริกเกอร์ NoMethodError ข้อยกเว้น และถ้า method_missing พบว่ามันจะใช้สิ่งนั้น

ตอนนี้ :

มาดูตัวอย่างโค้ดกัน!

สุดยอดโดยไม่มีข้อโต้แย้ง

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

Cat คลาสมี name เมธอดที่ใช้ super เพื่อเรียกเมธอดเดียวกันในคลาสพาเรนต์ (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 ทำงานแตกต่างกันเมื่อใช้โดยมีหรือไม่มีอาร์กิวเมนต์ .

ไม่มีอาร์กิวเมนต์:

จะ ส่งต่ออาร์กิวเมนต์ที่ใช้สำหรับการเรียกเมธอดดั้งเดิมไปยังอันใหม่ รวมถึงอาร์กิวเมนต์ของคีย์เวิร์ด &บล็อกหากกำหนดไว้

นี่คือตัวอย่าง :

def puts(*)
  super
end

puts 1, 2, 3

เมธอดนี้กำหนดไว้ภายนอกคลาสใดๆ จะเป็นของ Object . ซึ่งหมายความว่าจะถูกเรียกก่อน puts . ดั้งเดิม วิธีการ

ตอนนี้:

เมื่อคุณเรียก puts คุณกำลังเรียกวิธีการใหม่นี้ที่เราสร้างขึ้นซึ่งใช้ super เพื่อเรียก puts . ต้นฉบับ .

เมื่อใดควรใช้ Super vs Super()

เราเพิ่งมาดูวิธีใช้ super สำหรับการเรียกใช้เมธอดของผู้ปกครอง

แต่ จะเกิดอะไรขึ้นถ้าเมธอดหลักใช้อาร์กิวเมนต์ไม่เท่ากัน

ในกรณีนั้น คุณสามารถใช้:

  • super() ไม่มีข้อโต้แย้ง
  • super(arg1, arg2, ...) เพื่อเลือกข้อโต้แย้งที่คุณต้องการส่งผ่าน

ตัวอย่าง :

def puts
  super()
end

สังเกตว่า วงเล็บมีความหมายพิเศษอย่างไร ไม่เหมือนกับการเรียกใช้เมธอดปกติ

อีกสองสามสิ่งที่ควรรู้เกี่ยวกับ super :

  • ใช้ได้ภายในเมธอดเท่านั้น
  • ส่งคืนผลลัพธ์จากการเรียกเมธอดหลัก
  • เรียกได้หลายครั้ง

เส้นหนา (super ส่งคืนผลลัพธ์) เป็นกุญแจสำคัญในการทำความเข้าใจการใช้งานบางอย่างสำหรับ super ที่คุณอาจพบได้ในป่า

คุณสามารถใช้ super เพื่อนำรูปแบบมัณฑนากรไปใช้หรือถ้าคุณเรียกมันว่าภายใน initialize สามารถใช้เพื่อเริ่มต้นตัวแปรอินสแตนซ์ในคลาสหลักได้

สรุป

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

หากคุณชอบบทความนี้ คุณอาจต้องการสมัครรับจดหมายข่าว RubyGuides เพื่อรับเนื้อหาเพิ่มเติมเช่นนี้ และเคล็ดลับ Ruby ที่เป็นประโยชน์อื่นๆ ที่มีให้สำหรับสมาชิกเท่านั้น