Ruby instance_eval w klasie z attr_accessor
Rozumiem podstawową różnicę międzyinstance_eval
iclass_eval
. To, co odkryłem podczas zabawy, jest czymś dziwnymattr_accessor
. Oto przykład:
A = Class.new
A.class_eval{ attr_accessor :x }
a = A.new
a.x = "x"
a.x
=> "x" # ... expected
A.instance_eval{ attr_accessor :y }
A.y = "y"
=> NoMethodError: undefined method `y=' for A:Class
a.y = "y"
=> "y" # WHATTT?
Jak to się dzieje, że:
wartość elementu instance_eval nie była w dostępie do naszej klasy A (obiektu)to faktycznie dodało to do instancji A?