[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

class_eval vs (class << object

Ruby Freak

3/26/2008 4:00:00 AM

What is the difference between class_eval and "class << object"?

It seems like they are the same. I am thinking that class_eval affects
the greater class and "class_object" is used on a singleton class. Are
they mutually exclusive?

Thanks
3 Answers

7stud --

3/26/2008 6:23:00 AM

0

Ruby Freak wrote:
> What is the difference between class_eval and "class << object"?
>
> It seems like they are the same. I am thinking that class_eval affects
> the greater class and "class_object" is used on a singleton class. Are
> they mutually exclusive?
>
> Thanks

class Dog
attr_accessor :age

def initialize(a)
@age = a
end
end

Dog.class_eval{
def show
puts @age
end
}


d1 = Dog.new(5)
d2 = Dog.new(2)

d1.show #5
d2.show #2


class Dog
attr_accessor :age

def initialize(a)
@age = a
end
end


d1 = Dog.new(5)

class << d1
def show
puts age
end
end

d1.show #5

d2 = Dog.new(2)
d2.show

--output:--
undefined method `show' for #<Dog:0x25260 @age=2> (NoMethodError)
--
Posted via http://www.ruby-....

7stud --

3/26/2008 6:29:00 AM

0

Ruby Freak wrote:
> What is the difference between class_eval and "class << object"?
>
> It seems like they are the same. I am thinking that class_eval affects
> the greater class and "class_object" is used on a singleton class.

> Are
> they mutually exclusive?
>

class Dog
attr_accessor :age

def initialize(a)
@age = a
end
end

class << Dog
def greet
puts "hello"
end
end

Dog.class_eval{
def show
puts @age
end
}

Dog.greet #hello
d = Dog.new(5)
d.show #5
--
Posted via http://www.ruby-....

David A. Black

3/26/2008 11:27:00 AM

0

Hi --

On Wed, 26 Mar 2008, Ruby Freak wrote:

> What is the difference between class_eval and "class << object"?
>
> It seems like they are the same. I am thinking that class_eval affects
> the greater class and "class_object" is used on a singleton class. Are
> they mutually exclusive?

class << object is the class keyword, which starts a class definition
block (in this case, on the singleton class of object) and therefore a
new local scope.

class_eval is a method, not a keyword, so it requires a receiver --
namely, a Module or Class object. It takes a block, and the block does
shares the variables of the existing local scope.


David

--
Rails training from David A. Black and Ruby Power and Light:
ADVANCING WITH RAILS April 14-17 New York City
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
See http://www.r... for details and updates!