在Ruby中的单例类中调用单例方法?

时间:2016-11-05 12:09:34

标签: ruby class module singleton

考虑以下Ruby代码:

module MyModule
  class << self

    def process_item(item)
      item.capitalize
    end

    def foo=(item)
      @foo_ref=process_item(item)
    end

    def foo
      @foo_ref
    end

    self.foo = "initial foo"
  end
end

我想在单例类定义中设置一个默认的foo_ref变量。但是,Ruby解释器引发了以下错误:

  

单身类&#39 ;:未定义的方法`foo =&#39; #(NoMethodError)

如果我将self.foo = "Initial foo"更改为foo = "Initial foo",那么我将在单例类中创建一个局部变量,而不是调用setter方法。

另外,我确实意识到我可能必须在单例类定义之外的模块定义中放置process_item方法,这样它就不会成为单例方法,而是一个辅助方法。

这段代码的正确方法是什么(能够在单例类定义中调用单例方法,并在单例类定义中使用辅助方法)?

1 个答案:

答案 0 :(得分:1)

您可以将默认值定义为:

module MyModule
  class << self

    def process_item(item)
      item.capitalize
    end

    def foo=(item)
      @foo_ref=process_item(item)
    end

    def foo
      @foo_ref ||= "initial foo"
    end
  end
end

你要做的是将foo设置为单例类,而不是将foo设置为类。