我想动态地在类上定义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)
正如documentation中的示例所述,Class.new
传递了一个块,所以我会按以下方式执行:
klass = Class.new do
attr_accessor :name
end
instance = klass.new
instance.name = "Foo"
instance.name #=> "Foo"