Nuby: determine method passed and determine the receiver that rec eived the method

Hi Friends,

Forgive me in adv for asking a newbie question.

  1. First question: How do I get the the method passed?

Eg.

···

cat test1.rb
#-------------------------
class Dog
def bark
‘arf!arf!’
end
def method_missing(x)
p “method missing”
“sorry, cannot do #{x} in #{self}”
end
end

beethoven = Dog.new
p beethoven.bark
p beethoven.purr
#-------------------------

ruby -w test1.rb
“arf!arf!”
“sorry, cannot do purr in #Dog:0x2777228

I’d like a method similar to method_missing(x) (wherein the methodname is
passed in x), but only access it before a method is run (maybe name it
method_called(x)).

So I can do (maybe),


Class Dog

def method_called(x)
p “You ask for #{x}”
end
end


ruby -w test1.rb
“You ask for bark”
“arf!arf!”
“You ask for purr”
“sorry, cannot do purr in #Dog:0x2777228

  1. 2nd question: How do I get the receiver that received the method passed?

So that:

ruby -w test1.rb
“You ask for bark thru beethoven”
“arf!arf!”
“You ask for purr thru beethoven”
“sorry, cannot do purr thru beethoven”

That is all …for the moment. Sorry for the lengthy post.

thank you in advance.

kind regards -botp

Peña, Botp wrote:

  1. 2nd question: How do I get the receiver that received the method passed?

So that:

ruby -w test1.rb

“You ask for bark thru beethoven”
“arf!arf!”
“You ask for purr thru beethoven”
“sorry, cannot do purr thru beethoven”

I don’t think you can do this.

Variable names are incidental, essentially they’re just pointers to the
underlying object.

You can have more than one variable pointing to the same object, so any
object could
have an infinite number of ‘names’ (theoretically). Really, objects
don’t have a name,
variable names are just ways to help us remember which is which.

Why do you want to do this?

  • Dan

“Peña, Botp” botp@delmonte-phil.com schrieb im Newsbeitrag
news:1030AB5FAD0A3847B7B1F7B93332AFB501E18290@bgmail00.delmonte-phil.com

Hi Friends,

Forgive me in adv for asking a newbie question.

  1. First question: How do I get the the method passed?

Eg.

cat test1.rb
#-------------------------
class Dog
def bark
‘arf!arf!’
end
def method_missing(x)
p “method missing”
“sorry, cannot do #{x} in #{self}”
end
end

beethoven = Dog.new
p beethoven.bark
p beethoven.purr
#-------------------------

ruby -w test1.rb
“arf!arf!”
“sorry, cannot do purr in #Dog:0x2777228

I’d like a method similar to method_missing(x) (wherein the methodname is
passed in x), but only access it before a method is run (maybe name it
method_called(x)).

So I can do (maybe),


Class Dog

def method_called(x)
p “You ask for #{x}”
end
end

Tracing is one option. See
http://www.rubycentral.com/book/ref_m_kernel.html#Kernel.set_trace_func

Another option is to use a similar scheme as in Delegator and automatically
generate proxy methods that invoke your “method_called” just before they
hand over control to the real method.
http://www.rubycentral.com/book/lib_patterns.html

Which of the approaches you choose depends on your situation.

Tehre might be another option to define a module / class method that
automatically creates a new method that first invokes method_called and the
the original method. Sorryy, I don’t have the time at the moment to put
such a thing together.

As an additional information: there is a feature in the makes that allows to
define before, after and around hooks for method invocations which would
enable you to do similar things.

Regards

robert