Method_missing

Hello,

This is my first email that I send to this ML, so hi everyone :slight_smile:

I’ve been using Ruby for 2 years or more now, and I am still learning
this awesome language. But I can’t grasp my head about method_missing
and how it works, can someone please help me understand about how
method_missing works?

Thanks,

Diego

On Fri, Sep 17, 2010 at 4:48 PM, Diego V. [email protected]
wrote:

this awesome language. But I can’t grasp my head about method_missing
and how it works, can someone please help me understand about how
method_missing works?

what is in the docs that you do not understand?

best regards -botp

Diego V. wrote:

I’ve been using Ruby for 2 years or more now, and I am still learning
this awesome language. But I can’t grasp my head about method_missing
and how it works, can someone please help me understand about how
method_missing works?

class Foo
def bar(*args)
puts “You called bar with #{args.inspect}”
end
def method_missing(*args)
puts “method_missing with #{args.inspect}”
end
end

f = Foo.new
f.bar(1,2,3)
f.wibble(4,5,6)

Nice, so method_missing is called when I call a method that I didn’t
defined myself?

Thanks,

Diego

method_missing is a great tool for dynamically adding/handling methods
which aren’t currently part of the object.

I was just reading up on this in the free Ruby Best Practices book
(check out ch. 3): http://rubybestpractices.com

On Fri, Sep 17, 2010 at 11:55 AM, Diego V. [email protected]
wrote:

Nice, so method_missing is called when I call a method that I didn’t
defined myself?

Thanks,

It’s called when a message is sent to an object which doesn’t have a
method. If it does it doesn’t matter who defined it.


Rick DeNatale

Blog: http://talklikeaduck.denhaven2.com/
Github: rubyredrick (Rick DeNatale) · GitHub
Twitter: @RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale

Diego V. wrote:

I tried this code:

http://gist.github.com/585143

but why do i get a: asd.rb:6:in `method_missing’: wrong number of
arguments (1 for 0) (ArgumentError) – when i try to call
method_missing like that?

if i use method_missing(*args) it works, does method_missing requires
that i use an argument?

Run the code I first posted again, and look at the output carefully.

method_missing is passed the name of the method which didn’t exist as
the first argument, followed by 0 or more values which were the
arguments to the original call. So you must define it to receive at
least one argument.

A good template to use:

def method_missing(method_name, *args, &block)

end

I tried this code:

http://gist.github.com/585143

but why do i get a: asd.rb:6:in `method_missing’: wrong number of
arguments (1 for 0) (ArgumentError) – when i try to call
method_missing like that?

if i use method_missing(*args) it works, does method_missing requires
that i use an argument?

Thanks