how is it possible to add a method to a single object programatically?
E.g. I want to write a method
class Object
def rename_method(old_id, new_id)
...
end
end
The method shall rename a method for a specific instance of any class,
e.g. the following should be possible:
a = 5
5.rename_method :times, :veces
5.times { ... }
-> Error, Method "times"does not exist
5.veces { ... }
-> Expected behaviour
I already succeeded in renaming methods for whole classes, but for a
single instance?
I do not really have a use case for such a method, but it is fun
learning about the object model in Ruby.
Best regards,
Marco
On Mon, 9 Jan 2006, Marco Lange wrote:
> Hi,
>
> how is it possible to add a method to a single object programatically?
def obj.meth
...
end
(and a few other ways, but that's the simplest)
> E.g. I want to write a method
>
> class Object
>
> def rename_method(old_id, new_id)
> ...
> end
>
> end
>
> The method shall rename a method for a specific instance of any class, e.g.
> the following should be possible:
>
>
> a = 5
> 5.rename_method :times, :veces
>
> 5.times { ... }
> -> Error, Method "times"does not exist
>
> 5.veces { ... }
> -> Expected behaviour
>
> I already succeeded in renaming methods for whole classes, but for a single
> instance?
Keep in mind that a single instance has a class of its own -- its
singleton class -- as well as its class of origin. If you do the
renaming in the singleton class, it will affect only that object.
Have a look at this example, and see if it helps:
class C
def m
puts "In the method"
end
end
c = C.new
c.m # In the method
class << c # "<< c" invokes the singleton class of c
alias n m
undef_method("m")
end
c.n # In the method
c.m # error -- no such method
Hmmm... one problem is that Fixnums don't have singleton classes, so
this wouldn't work for 5. Anyway, maybe it will give you ideas :-)
David
--
David A. Black
dbl...@wobblini.net
"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black