在Ruby中,对象有一个方便的方法叫做
当对象收到无法处理的消息时,Ruby会调用这个方法。符号是调用的方法的符号,args是传递给它的任何参数。默认情况下,解释器在调用此方法时会引发错误。但是,可以重写该方法以提供更动态的行为。下面的示例创建了一个名为Roman的类,响应由罗马数字组成的方法名,并返回相应的整数值。
method_missing
,它允许处理甚至没有被(明确)定义的方法调用:当对象收到无法处理的消息时,Ruby会调用这个方法。符号是调用的方法的符号,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
的功能,并且你如何在代码中实现相应的功能?