What's different between self.method and class << self?


#1

we can define a instance method in lots way.
mostly, I saw people define like this:
1.
class A
def self.class_method
#some code here…
end
end

class A
class << self
def class_method
#some code here…
end
end
end

==
the question confused me is what’s the advantage of doing this in 2?
they’are different? which is your choose?


#2

On Tue, Oct 21, 2008 at 3:23 AM, Zhenning G.
removed_email_address@domain.invalidwrote:

class A
they’are different? which is your choose?

I asked this same question just a couple of weeks ago. The answers I
was
given were:

Method 2:

  1. Saves some typing
  2. Has a slightly different mechanism for looking up class constants,
    which
    99.99% of the time won’t be noticed.

Other than that there are no differences between methods 1 & 2.

–wpd


#3

Patrick D. wrote:

On Tue, Oct 21, 2008 at 3:23 AM, Zhenning G.
removed_email_address@domain.invalidwrote:

class A
they’are different? which is your choose?

I asked this same question just a couple of weeks ago. The answers I
was
given were:

Method 2:

  1. Saves some typing
  2. Has a slightly different mechanism for looking up class constants,
    which
    99.99% of the time won’t be noticed.

Other than that there are no differences between methods 1 & 2.

–wpd

what’s the meaning of saves some typing???
can you give me a example?


#4

what’s the meaning of saves some typing???
can you give me a example?

Posted via http://www.ruby-forum.com/.

Instead of having to type

def self.method
blah
blah
blah
end

you can type (within the class << self clause)

def method
blah
blah
blah
end

I didn’t say it would save you a lot of typing, just some :slight_smile:

–wpd


#5

Shot (Piotr S.):

(With the first approach you’d have to define self.prop and
self.prop= to be able to write code like Example.prop = ‘value’.)

…or use something like Rails’ cattr_* accessors – but they work on
class variables (as opposed to instance variables of the singleton.)

– Shot


#6

Zhenning G.:

we can define a instance method in lots way.
mostly, I saw people define like this:
1.
class A
def self.class_method
#some code here…
end
end

class A
class << self
def class_method
#some code here…
end
end
end

the question confused me is what’s the advantage of doing this in 2?

You can work on the singleton’s properties with attr_* methods:

class Example
class << self
attr_accessor :prop
end
end

(With the first approach you’d have to define self.prop and
self.prop= to be able to write code like Example.prop = ‘value’.)

– Shot