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
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.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs