Adding a method to a single object

M

Marco Lange

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
 
D

dblack

Hi --

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
(e-mail address removed)

"Ruby for Rails", from Manning Publications, coming April 2006!
http://www.manning.com/books/black
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,201
Messages
2,571,049
Members
47,655
Latest member
eizareri

Latest Threads

Top