2011-09-11 34 views
0

我需要具有单身行为的类。单例模块或类方法+类实例变量在Ruby中类似单例的行为?

什么是使用Singleton模块之间的区别...

require 'singleton' 

class X 
    include Singleton 

    def set_x(x) 
     @x = x 
    end 

    def test 
     puts @x 
    end 
end 

X::instance.set_x('hello') 
X::instance.test 

...并使用类方法和类的实例变量?

class X 
    def self.set_x(x) 
     @x = x 
    end 

    def self.test 
     puts @x 
    end 
end 

X::set_x('hello') 
X::test 
+1

恕我直言,主要区别在于沟通你正在尝试做的事情的意图,如果你包括“单身人士”,这更明显。 –

回答

1

没有,因为你写你的代码 - 但单身人士是一个只允许单个实例的类。第二个代码段中的任何内容都不允许实例化多个实例。

+0

那么在第一个代码片段中,仍然可以写't = X.new'? – AJM

+1

似乎它会更快尝试,不是吗?但不,这是不可能的(至少没有错误)。它的单例部分从公共视图中删除'new'方法 - 这就是为什么有'实例'方法。另一种方法是让“新”返回单个实例,但它可以说是较少交流。 –

+0

是的,尝试它会更快。我只是想确保这是主要的区别。 – AJM