Adding a method to a single object

Hi,

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

Hi –

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)

The method shall rename a method for a specific instance of any class, e.g.
→ 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 :slight_smile:

David


David A. Black
[email protected]

“Ruby for Rails”, from Manning Publications, coming April 2006!