我正在尝试创建一个包含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"