[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

class << self idiom

surge

6/20/2007 9:40:00 PM

Hello,

I have trouble understanding the need for the class << self idiom. For
example, let's say I have this class:

class My_Class
def method_1
end
end

Now, I want to extend that class. I can do:

class My_Class
def method_2
end
end

or:

class My_Class
class << self
def method_2
end
end
end

I understand that in the second case we're extending the singleton
class of My_Class, but why is the second form so often used in Ruby
vs. the other form? Isn't the end result identical?

2 Answers

Daniel DeLorme

6/20/2007 10:57:00 PM

0

surge wrote:
> Now, I want to extend that class. I can do:
>
> class My_Class
> def method_2
> end
> end
>
> or:
>
> class My_Class
> class << self
> def method_2
> end
> end
> end
>
> I understand that in the second case we're extending the singleton
> class of My_Class, but why is the second form so often used in Ruby
> vs. the other form? Isn't the end result identical?

They are *not* identical. The first defines an *instance* method
(My_Class.new.method_2); the second defines a *class* method
(My_Class.method_2

Now, there are other ways of defining class methods. Which one you use
depends a lot on personal preference but depends also on constants
(which have a static scope) ->

class Foo
K = "foo"
end

#can access K
class Foo
class << self
def foo1; K; end
end
def self.foo2; K; end
def Foo.foo3; K; end
end

#must specify Foo::K
class << Foo
def foo4; Foo::K; end
end
def Foo.foo5; Foo::K; end


Daniel

surge

6/20/2007 11:20:00 PM

0

You're completely right and I understand my mistake now. Thanks for
the comprehensive answer.

Surge