Class_eval vs (class << object)

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

Ruby F. 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)

Ruby F. 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

Hi –

On Wed, 26 Mar 2008, Ruby F. 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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs