Ruby instance_eval für eine Klasse mit attr_accessor
Ich verstehe den grundlegenden Unterschied zwischeninstance_eval
undclass_eval
. Was ich jedoch beim Herumspielen entdeckt habe, ist etwas Seltsamesattr_accessor
. Hier ist ein Beispiel:
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?
Wie kommt es, dass:
das instance_eval hat beim Accessor nicht auf unsere A-Klasse (Objekt) zugegriffenes dann tatsächlich auf Instanzen von A hinzugefügt?