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 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-forum.com/\.
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-forum.com/\.
Hi --
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
On Wed, 26 Mar 2008, Ruby Freak wrote:
--
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.rubypal.com for details and updates!