2

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

require 'singleton'

class Foo
  attr_accessor :bar
  include Singleton
end

Foo.bar = 'foobar'

这给出了错误:

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

我在这里做错了什么?

4

3 回答 3

5

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

class Foo
  singleton_class.class_eval{attr_accessor :bar}
end
于 2013-07-09T13:28:17.003 回答
2

尝试 -

     Foo.instance.bar = 'foobar'

记录在这里这里

于 2013-07-09T13:26:18.677 回答
1

使用定义的方法attr_accessors是实例方法,您正在尝试调用未定义bar=Foo类上的方法。您必须先获取实例,Foo然后再调用bar=它:

Foo.instance.bar = "whatever"
于 2013-07-09T13:36:24.773 回答