在 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
,以及如何在代码中实现等价物?