【发布时间】:2014-02-24 01:32:38
【问题描述】:
我想在一个类上动态定义 attr_accessor,但它使生成的方法成为私有的。如果不使用正常的类语法或自己编写方法,如何使以下内容不引发错误?
klass = Class.new
klass.send(:attr_accessor, 'name')
instance = klass.new
instance.name
NoMethodError: private method `name' called for #<#<Class:0x007fce725ec660>:0x007fce72607b18>
【问题讨论】:
-
你使用的是 ruby 2.0 吗?
-
刚刚试了你的截图,它适用于 MRI 2.1.0。您使用的是哪个版本的 Ruby?
-
我在 1.9.3 版本中尝试过,也可以正常工作。但是后来尝试了 ruby 2.0,我得到了和你一样的错误。
-
@IsmaelAbreu 我正在使用 ruby 2.0.0。如果我真的需要,我可以升级它。
-
@KarlGlaser 在创建
class时没有将块传递给Class.new的任何原因,这似乎更像是文档中所做的
标签: ruby metaprogramming private attr-accessor