我瞭解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