What is the point of defining respond_to_missing?
as opposed to defining respond_to?
? What goes wrong if you redefine respond_to?
for some class?
respond_to? is a Ruby method for detecting whether the class has a particular method on it. For example, @user.respond_to?('eat_food')
What is method_missing? method_missing is a method that ruby gives you access inside of your objects a way to handle situations when you call a method that doesn't exist. It's sort of like a Begin/Rescue, but for method calls. It gives you one last chance to deal with that method call before an exception is raised.
Without respond_to_missing?
defined, trying to get the method via method
will fail:
class Foo def method_missing name, *args p args end def respond_to? name, include_private = false true end end f = Foo.new f.bar #=> [] f.respond_to? :bar #=> true f.method :bar # NameError: undefined method `bar' for class `Foo' class Foo def respond_to? *args; super; end # “Reverting” previous redefinition def respond_to_missing? *args true end end f.method :bar #=> #<Method: Foo#bar>
Marc-André (a Ruby core committer) has a good blog post on respond_to_missing?
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With