2014-02-24 49 views
0

我想動態地定義類的attr_accessor,但它使生成的方法是私人的。如何在不使用普通類語法或自己編寫方法的情況下不發生錯誤?爲什麼attr_accessor將我的方法設爲私有?

klass = Class.new 
klass.send(:attr_accessor, 'name') 
instance = klass.new 
instance.name 

NoMethodError: private method `name' called for #<#<Class:0x007fce725ec660>:0x007fce72607b18> 
+0

您使用紅寶石2.0? –

+1

剛剛嘗試過你的剪切,它可以與MRI 2.1.0一起使用。你使用的是什麼版本的Ruby? – tompave

+1

我試過版本1.9.3,也工作。但後來嘗試紅寶石2.0,我得到了與你一樣的錯誤。 –

回答

2

如從documentation在實施例中所描述的,Class.new傳遞一個塊,所以我會如下面做:

klass = Class.new do 
    attr_accessor :name 
end 

instance = klass.new 
instance.name = "Foo" 
instance.name #=> "Foo" 
相關問題