代码之家  ›  专栏  ›  技术社区  ›  Luke Chadwick

确保类的单个实例的正确方法是什么?[复制品]

  •  3
  • Luke Chadwick  · 技术社区  · 14 年前

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

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

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

    更新:我已经读过“include singleton”,但是当我在Ruby1.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 回复  |  直到 6 年前
        1
  •  4
  •   Vitaly Kushner    14 年前

    在Ruby中已经有了关于如何做的答案,但是我首先会问你需要做什么?

    没有必要将Java模式复制到露比。我从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中的类只是类类的实例,因此它们可以拥有实例可以拥有的一切。