2010-11-18 57 views
0

我是一個關於ruby的新手。 不應該單身類的初始化函數有任何參數嗎? 這裏是我的代碼:關於ruby中單例的問題

require 'singleton' 
class AAA 
    attr :string , true 
    include Singleton 
    def initialize(stirng) 
     @string = "aaa"; 
    end 
end 
a = AAA.instance("simpleton"); 
puts a.string 

我認爲應該correct.but紅寶石還告訴我:

/usr/lib/ruby/1.8/singleton.rb:94:in`初始化「:錯誤的參數數目(0 1)(引發ArgumentError)

from /usr/lib/ruby/1.8/singleton.rb:94:in `new' 
from /usr/lib/ruby/1.8/singleton.rb:94:in `instance' 

T___T

回答

2

由於它是一個單例,所以不需要傳遞任何參數來初始化,因爲它總是返回相同的對象。

如果您想在每次調用該類時更改某些內容,則可以定義一種新方法。

require 'singleton' 
class AAA 
    attr :string , true 
    include Singleton 
    def initialize 
     @string = "aaa"; 
    end 
    def self.change(string) 
     instance.string = string 
     instance 
    end 
end 
a = AAA.change("simpleton"); 
puts a.string 
0

我不是確定你想要做什麼,但是有很多其他方法可以在不使用Singleton模塊的情況下獲得單例實例。

我個人很喜歡這種方法:

class Foo 
    def self.instance 
    @__instance__ ||= new 
    end 
end 

如果你可以給多一點有關爲什麼你試圖做你正在做的事情可能會有所幫助。

+1

只是爲了學習...〜_〜 – 2010-11-18 18:20:13

+0

如果你學習,你也應該爲什麼單例模式是「壞」的閱讀起來。在Ruby等語言中並不是什麼大事,但在java/C#中並不推薦。 – jonnii 2010-11-18 18:51:28

+5

-1:這個重新發明的車輪不是線程安全的。 – 2010-11-18 22:55:43