2011-09-11 41 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