2010-11-18 7 views
0

Ich bin ein Neuling über Rubin. sollte die Initialisierungsfunktion der Singleton-Klasse keine Argumente haben? hier ist mein Code:ein Problem über Singleton in Rubin

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

ich denke, sollte der Rubin mir auch sagen correct.but werden:

/usr/lib/ruby/1.8/singleton.rb:94:in `initialisieren ‚: falsche Anzahl von Argumenten (0 1) (Argument)

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

T___T

Antwort

2

Da es sich um einen Singleton handelt, müssen keine Parameter zur Initialisierung übergeben werden, da immer dasselbe Objekt zurückgegeben wird.

Wenn Sie bei jedem Aufruf der Klasse etwas ändern möchten, können Sie eine neue Methode definieren.

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

ich bin nicht Sicher, was Sie zu tun versuchen, aber es gibt viele andere Möglichkeiten, eine Singleton-Instanz zu erhalten, ohne das Singleton-Modul zu verwenden.

Ich persönlich mag diese Methode:

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

Wenn Sie ein wenig mehr Informationen über geben könnte, warum Sie versuchen zu tun, was Sie tun könnte es hilfreich sein.

+1

nur für das Studium ... ~ _ ~ –

+0

Wenn Sie studieren Sie auch auf lesen sollte, warum die Singletonmuster ist „schlecht“. Es ist nicht so eine große Sache in Sprachen wie Ruby, aber in Java/C# wird es nicht empfohlen. – jonnii

+5

-1: Dieses neu erfundene Rad ist nicht gewindesicher. –