The PickAxe doesn't seem to cover details of how to dynamically create class or add methods to existing classes. For example, sometimes I see people doing things like this: class << self ... and I'm wondering exactly what's going on. Anybody know of a good book or online tutorial for this kind of thing? Thanks! Jeff
on 2006-02-16 16:16
on 2006-02-16 16:49
On 2/16/06, Jeff Cohen <email@example.com> wrote: > This may help: http://www.whytheluckystiff.net/articles/seeingMet... class << self is usually used for things that are a bit beyond a basic method definition. For example, if you just want to define a new class method called blah, you could write: def self.blah .... end However, if you want to do alias_method on a class method, you can't do: alias_method :self.blah, etc, etc. You need to put it inside a class << self section.
on 2006-02-16 17:56
Hi -- On Fri, 17 Feb 2006, Jeff Cohen wrote: > The PickAxe doesn't seem to cover details of how to dynamically create > class or add methods to existing classes. For example, sometimes I see > people doing things like this: > > class << self > ... > > and I'm wondering exactly what's going on. The "<< obj" notation takes you into the singleton class of obj, which is where that particular object's singleton methods (i.e., those that only that object can call) are stored. Except for some minor differences that usually don't matter, these two things are equivalent: def a.meth end and class << a def meth end end In both cases, you're defining a method that only the object a can call. > Anybody know of a good book or online tutorial for this kind of thing? http://www.rubygarden.org/ruby?SingletonTutorial goes over singleton classes and methods, and also the other meaning of "singleton" in Ruby (not closely related, except by coincidence of name, but good to know about *because* of the coincidence of name). David -- David A. Black (firstname.lastname@example.org) Ruby Power and Light (http://www.rubypowerandlight.com) "Ruby for Rails" chapters now available from Manning Early Access Program! http://www.manning.com/books/black
on 2006-02-16 18:08
On 2/16/06, email@example.com <firstname.lastname@example.org> wrote: > end > end > > In both cases, you're defining a method that only the object a can > call. It also might be worth pointing out that if 'a' is a class, you'll be adding a class method. so the notation class << self ... is often used within a class to defind a class method. This type of usage is described on page 34 in PickAxe 2 (the sidebar thing). Cameron
on 2006-02-16 18:56
On 2/16/06, Wilson Bilkovich <email@example.com> wrote: > > Anybody know of a good book or online tutorial for this kind of thing? > > > > This may help: > http://www.whytheluckystiff.net/articles/seeingMet... I wonder if the stiff server is down now. That URL isn't working, but Google knows about it.
on 2006-02-16 22:58
And how does class_eval and instance_eval play a role here? I think I'm almost getting it but feel like I need one or two more dots to connect.
on 2006-02-17 21:08
As far as I remember, class_eval evaluates a block of code within the context of a class. So, if you have a code which adds methods, they will be added to the class and will be available to all instances of this class. instance_eval is evaluated in the context of an object which is an instance of some class. If you add methods they will be available only to this object. Cheers Eugene Vahlis Department of Computer Science University of Toronto