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