我刚刚在ruby-trello中看到了这行 Ruby 代码:
# Returns the member who created the action.
one :member_creator, :via => Member, :using => :member_creator_id
它似乎与定义为的超类方法有关:
def self.one(name, opts = {})
class_eval do
define_method(:"#{name}") do |*args|
options = opts.dup
klass = options.delete(:via) || Trello.const_get(name.to_s.camelize)
ident = options.delete(:using) || :id
klass.find(self.send(ident))
end
end
end
我知道class_eval与反射有关。
有人可以解释子类代码行的目的吗?
我的猜测是它调用类成员作为名称one
传递:member_creator
,两个尾随参数作为opts
参数。但是为什么要在类级别调用呢?