我了解instance_eval
和class_eval
之间的基本区别。我发现虽然玩耍时有些奇怪,但涉及attr_accessor
。这里有一个例子:具有attr_accessor的类的Ruby实例_eval
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?
它是如何:
- 的instance_eval的没有在访问到我们的A类(对象)
- 那么它实际上添加它到A的情况下, ?
这个人搞砸了。很好的例子。 @ Daniel_Vartanov的答案实际上解释了为什么'attr_accessor'不适用于self,但这是一个很好地说明每种类型的def'n方法会发生什么情况的方法。谢谢一堆。 – brad