Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Adding a method to a single object

0 views
Skip to first unread message

Marco Lange

unread,
Jan 8, 2006, 9:01:40 PM1/8/06
to
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

dbl...@wobblini.net

unread,
Jan 8, 2006, 9:20:22 PM1/8/06
to
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)

> 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


0 new messages