我正在尝试使用attr_accessor
创建一个包含Singleton模块的类。这似乎不起作用。
require 'singleton'
class Foo
attr_accessor :bar
include Singleton
end
Foo.bar = 'foobar'
这给出了错误:
undefined method `bar=' for Foo:Class (NoMethodError)
我在这里做错了什么?
答案 0 :(得分:5)
Singleton
不会改变attr_accessor
的工作方式。它只能确保您只能有一个实例。所以你必须在本征类中调用attr_accessor
,就像没有Singleton
一样。
class Foo
singleton_class.class_eval{attr_accessor :bar}
end
答案 1 :(得分:2)
答案 2 :(得分:1)
使用attr_accessors
定义的方法是实例方法,您试图在bar=
类上调用方法Foo
,而不是定义它。您必须首先获取Foo
的实例,然后在其上调用bar=
:
Foo.instance.bar = "whatever"