Ruby元编程 #
一、动态方法 #
1.1 define_method #
ruby
class Person
define_method :greet do |name|
"Hello, #{name}!"
end
end
Person.new.greet("Ruby")
1.2 method_missing #
ruby
class Dynamic
def method_missing(name, *args)
if name.to_s.start_with?("find_by_")
attribute = name.to_s.sub("find_by_", "")
find_by(attribute, args.first)
else
super
end
end
def respond_to_missing?(name, include_private = false)
name.to_s.start_with?("find_by_") || super
end
end
二、eval #
2.1 instance_eval #
ruby
class Person
end
person = Person.new
person.instance_eval do
@name = "Ruby"
def greet
"Hello, #{@name}"
end
end
2.2 class_eval #
ruby
Person.class_eval do
attr_accessor :name
def greet
"Hello, #{@name}"
end
end
三、类宏 #
ruby
class AttrAccessor
def self.my_attr_accessor(*names)
names.each do |name|
define_method(name) { instance_variable_get("@#{name}") }
define_method("#{name}=") { |value| instance_variable_set("@#{name}", value) }
end
end
end
四、总结 #
本章我们学习了:
- define_method:动态定义方法
- method_missing:处理未定义方法
- eval:instance_eval、class_eval
- 类宏:自定义属性方法
接下来让我们学习Ruby的并发编程!
最后更新:2026-03-27