如何像在 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")
我想制作一个 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")