【发布时间】:2011-02-21 09:25:19
【问题描述】:
在 Ruby 中,对象有一个方便的方法,称为 method_missing,它允许处理对甚至没有(显式)定义的方法的方法调用:
当 obj 收到无法处理的消息时由 Ruby 调用。 symbol 是被调用方法的符号,args 是传递给它的任何参数。默认情况下,调用此方法时,解释器会引发错误。但是,可以覆盖该方法以提供更多动态行为。下面的示例创建了一个 Roman 类,它响应名称由罗马数字组成的方法,并返回相应的整数值。
class Roman
def romanToInt(str)
# ...
end
def method_missing(methId)
str = methId.id2name
romanToInt(str)
end
end
r = Roman.new
r.iv #=> 4
r.xxiii #=> 23
r.mm #=> 2000
例如,Ruby on Rails 使用它来允许调用诸如find_by_my_column_name 之类的方法。
我的问题是,还有哪些其他语言支持 method_missing 的等价物,您如何在代码中实现等价物?
【问题讨论】:
标签: programming-languages language-features method-missing