为什么attr_accessor将我的方法设为私有?

时间:2014-02-24 01:32:39

标签: ruby metaprogramming private 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>

1 个答案:

答案 0 :(得分:2)

正如documentation中的示例所述,Class.new传递了一个块,所以我会按以下方式执行:

klass = Class.new do
  attr_accessor :name
end

instance = klass.new
instance.name = "Foo"
instance.name #=> "Foo"