如何像在 Prime class 中一样在 Ruby 中创建默认实例?

How to make a default instance in Ruby as in Prime class?

我想制作一个 class 或者一个可以用 "require" 或 "require_relative" 加载/需要的模块。然而,为了简单起见,我不想实例化任何对象,只是开始使用它的方法,类似于 Ruby 的 Prime class。我怎样才能做到这一点?

require "my_module"
puts My_module.convert("data")

而不是这个:

require "my_module"
an_instance = My_module::My_class.new
puts an_instance.convert("data")

http://ruby-doc.org/stdlib-1.9.3/libdoc/prime/rdoc/Prime.html

Prime class 使用 singleton pattern to achieve this behaviour, then uses a clever trick 使所有实例方法看起来就像是 class 方法一样。但是,我真的不明白为什么这样做。如果需要保持一些全局状态,单例模式将很有用,但 Prime class 并没有真正利用它。有人说单例是最被过度使用的模式,他们可能是对的。

我现在只是猜测您的转换器不需要保持全局状态。按照这个假设,您可以只使用模块方法来实现您描述的 API 。例如:

module MyModule
  def self.convert(data)
    MyClass.new.convert(data)
  end
end

然后您可以使用

调用此方法
MyModule.convert("data")