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

四、总结 #

本章我们学习了:

  1. define_method:动态定义方法
  2. method_missing:处理未定义方法
  3. eval:instance_eval、class_eval
  4. 类宏:自定义属性方法

接下来让我们学习Ruby的并发编程!

最后更新:2026-03-27