确保单个类实例的正确方法是什么?

时间:2010-02-22 09:47:03

标签: ruby coding-style singleton

在java中我会创建这样的东西:

private static MyClass instance;

public static MyClass getInstance() {
  if(instance != null) {
    return instance;
  }
  instance = new MyClass();
  return instance;
}

在ruby中获取相同功能的适当方法是什么?

更新:我读过'包含Singleton',但当我尝试在Ruby 1.9上使用irb时,我得到了:

[vertis@raven:~/workspace/test]$ ruby -v
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.4.0]
[vertis@raven:~/workspace/test]$ irb
irb(main):001:0> class TestTest
irb(main):002:1>   include Singleton
irb(main):003:1> end
NameError: uninitialized constant TestTest::Singleton
    from (irb):2:in `<class:TestTest>'
    from (irb):1
    from /usr/local/bin/irb:12:in `<main>'

1 个答案:

答案 0 :(得分:4)

已经有了如何在Ruby中做到这一点的答案,但我先问你需要吗?

无需将Java模式复制到Ruby。我从2005年开始做Ruby,从来没有需要一个单例类。

为什么你需要一个实例开始?为什么不能只定义类方法并在类上调用它们。

据我所知,你正在尝试像:

instance = Klass.new
instance.foo
.. then somewhere else
instance = Klass.new # expecting this to return the same instance
instance.bar

但你可以这样做:

Klass.foo
... in other place
Klass.bar

因为thre只有一个Klass类,所以你的问题本身就解决了,而且输入的问题也少了:)

Ruby中的

类只是类Class的实例,因此它们可以拥有实例可以拥有的所有内容。