0

我想在一个类上动态定义 attr_accessor ,但它使生成的方法成为私有的。如果不使用正常的类语法或自己编写方法,如何使以下内容不引发错误?

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

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

1 回答 1

2

文档中的示例中所述,Class.new传递了一个块,因此我将执行以下操作:

klass = Class.new do
  attr_accessor :name
end

instance = klass.new
instance.name = "Foo"
instance.name #=> "Foo"
于 2014-02-24T02:05:54.823 回答