การกำหนดเมธอดแบบไดนามิก
เรียนรู้การกำหนดและเรียกใช้เมธอดแบบไดนามิกด้วย define_method และ method_missing
การกำหนดเมธอดแบบไดนามิก เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
การสร้างเมธอดแบบไดนามิก
การกำหนดเมธอดแบบไดนามิก
ใน Ruby คุณสามารถสร้างเมธอดแบบไดนามิกขณะทำงานได้
ความสามารถนี้ช่วยให้โค้ดยืดหยุ่นและนำกลับมาใช้ใหม่ได้มากขึ้น

การใช้ define_method
การใช้ define_method
เมธอด define_method ช่วยให้กำหนดเมธอดแบบไดนามิกได้
class Person
define_method(:greet) { puts 'Hello!' }
end
p = Person.new
p.greetการใช้ define_method พร้อมพารามิเตอร์
การใช้ define_method พร้อมพารามิเตอร์
คุณสามารถส่งอาร์กิวเมนต์ไปยังเมธอดที่สร้างขึ้นแบบไดนามิกได้
class Person
define_method(:greet) { |name| puts "Hello, #{name}!" }
end
p = Person.new
p.greet('Alice')การใช้ method_missing
การใช้ method_missing
เมธอด method_missing ดักจับการเรียกใช้เมธอดที่ไม่ได้กำหนดไว้
class Person
def method_missing(name, *args)
puts "Method '#{name}' is missing!"
end
end
p = Person.new
p.unknown_methodการจัดการ method_missing แบบไดนามิก
การจัดการ method_missing แบบไดนามิก
คุณสามารถใช้ method_missing เพื่อกำหนดการจัดการเมธอดที่ยืดหยุ่นได้
class DynamicPerson
def method_missing(name, *args)
if name.to_s.start_with?('say_')
puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
else
super
end
end
end
p = DynamicPerson.new
p.say_hello_worldการเขียนทับ respond_to_missing?
การเขียนทับ respond_to_missing?
เพื่อจัดการการตรวจสอบเมธอดอย่างถูกต้อง ให้เขียนทับ respond_to_missing?
class DynamicPerson
def method_missing(name, *args)
if name.to_s.start_with?('say_')
puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
else
super
end
end
def respond_to_missing?(name, include_private = false)
name.to_s.start_with?('say_') || super
end
end
p = DynamicPerson.new
puts p.respond_to?(:say_hello)การใช้ method_missing สำหรับตัวอ่านและตัวกำหนดค่าแบบไดนามิก
การใช้ method_missing สำหรับตัวอ่านและตัวกำหนดค่าแบบไดนามิก
คุณสามารถสร้างแอตทริบิวต์แบบไดนามิกโดยใช้ method_missing
class DynamicPerson
def initialize
@data = {}
end
def method_missing(name, *args)
attribute = name.to_s.sub(/=$/, '')
if name.to_s.end_with?('=')
@data[attribute] = args.first
else
@data[attribute]
end
end
end
p = DynamicPerson.new
p.name = 'Alice'
puts p.nameความเสี่ยงด้านความปลอดภัยของ method_missing
ความเสี่ยงด้านความปลอดภัยของ method_missing
การใช้ method_missing อย่างไม่เหมาะสมอาจทำให้เกิดความเสี่ยง:
- พฤติกรรมที่ไม่คาดคิดขณะจัดการเมธอดที่ไม่รู้จัก
- ปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้นจากการค้นหาเมธอดมากเกินไป
- ช่องโหว่ด้านความปลอดภัยหากใช้ร่วมกับข้อมูลเข้าจากผู้ใช้
ทบทวนเมธอดแบบไดนามิก
ขอแสดงความยินดี!
คุณได้เรียนรู้วิธีกำหนดและเรียกใช้เมธอดแบบไดนามิกใน Ruby แล้ว
ถัดไป คุณจะได้สำรวจคลาสเปิดและการแพตช์ลิง

คำถามที่พบบ่อย
บทเรียน “การกำหนดเมธอดแบบไดนามิก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดเมธอดแบบไดนามิก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเมธอดแบบไดนามิก”
เรียนรู้การกำหนดและเรียกใช้เมธอดแบบไดนามิกด้วย define_method และ method_missing คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดเมธอดแบบไดนามิก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมตาโปรแกรมมิงคืออะไร
- การกำหนดเมธอดแบบไดนามิก
- คลาสเปิดและการแพตช์แบบลิง
- การใช้ send และ eval