我喜欢Ruby的单身人士,但我想更好地利用它,所以这里是示例
require 'singleton'
class Foo
include Singleton
def initialize
# code to setup singleton here
end
def self.get_bar
Foo.instance.get_bar
end
def get_bar
end
def get_nar
end
end
用法
Foo.instance.get_bar
(默认)或Foo.get_bar
(由于我制作的静态self.get_bar
方法)
有没有优雅的方法可以让所有方法都可以访问,而不必为每个方法编写静态包装器?为每个方法.instance
更新
Ruby 1.8.7
答案 0 :(得分:3)
只需将类与实例分开:
class Foo
def initialize
end
def get_bar
end
def get_nar
end
end
MyFoo = Foo.new
MyFoo.get_bar
答案 1 :(得分:3)
你可以混合这个模块:
module DelegateToSingleton
def respond_to_missing?(method)
super || instance.respond_to?(method)
end
def method_missing(method, *args)
instance.send(method, *args)
end
end
进入你的单身人士:
class Foo
extend DelegateToSingleton
include Singleton
def foo
'foo'
end
def bar
'bar'
end
end
这些结果:
p Foo.foo # => "foo"
p Foo.bar # => "bar"
DelegateToSingleton::method_missing
是它的工作原理:每当Foo收到一个它不知道的方法时,它就会将它转发给它的实例。
DelegateToSingleton::respond_to_missing?
并不是严格需要的,但是每当使用method_missing玩弄技巧时都会有礼貌。
对于早于1.9.2的Ruby:Override respond_to?
instead of respond_to_missing?