Ruby Singleton attr_accessor

时间:2013-07-09 13:22:25

标签: ruby singleton

我正在尝试使用attr_accessor创建一个包含Singleton模块的类。这似乎不起作用。

require 'singleton'

class Foo
  attr_accessor :bar
  include Singleton
end

Foo.bar = 'foobar'

这给出了错误:

undefined method `bar=' for Foo:Class (NoMethodError)

我在这里做错了什么?

3 个答案:

答案 0 :(得分:5)

Singleton不会改变attr_accessor的工作方式。它只能确保您只能有一个实例。所以你必须在本征类中调用attr_accessor,就像没有Singleton一样。

class Foo
  singleton_class.class_eval{attr_accessor :bar}
end

答案 1 :(得分:2)

尝试 -

     Foo.instance.bar = 'foobar'

记录HereHere

答案 2 :(得分:1)

使用attr_accessors定义的方法是实例方法,您试图在bar=类上调用方法Foo,而不是定义它。您必须首先获取Foo的实例,然后在其上调用bar=

Foo.instance.bar = "whatever"