0
在Ruby中,消息是字符串。如何定义如何响应任意字符串作为消息,而不是预定义一组消息及其响应?如何创建可以处理和响应任意消息的对象
在Ruby中,消息是字符串。如何定义如何响应任意字符串作为消息,而不是预定义一组消息及其响应?如何创建可以处理和响应任意消息的对象
class MessageResponder
def method_missing(method, *args, &block)
"You called #{method}(#{args.map(&:inspect).join(', ')})#{' with block' if block}"
end
end
responder = MessageResponder.new
responder.foo(3, 7)
# => You called foo(3, 7)
如果消息不对应于任何的类的方法,则称为method_missing
该方法被调用。您可以在示例中看到它收到的内容。如果你覆盖它,你可以回复任何消息。
没有匹配方法的消息发送到method_missing
。不管你喜欢什么,你都可以实现它。