在Ruby的单例类中调用一个单例方法



考虑以下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解释器会抛出以下错误:

单例类':未定义方法' foo=' for #(NoMethodError)

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

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

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

您可以定义默认值为:

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设置为类。

相关内容

  • 没有找到相关文章

最新更新