2010-11-18 24 views
0

tekil hakkında bir sorun Ben ruby ​​hakkında bir yeni biri duyuyorum. , singleton sınıfının initialize işlevi herhangi bir argümana sahip olmamalıdır?ruby ​​

/usr/lib/ruby/1.8/singleton.rb:94:in

`başlatmak:

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

i yakut da söyle correct.but gerektiğini düşünüyorum: İşte benim kodudur ': bağımsız değişken yanlış numara (1 için 0) (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

cevap

2

Tekil olduğu için, başlatılacak herhangi bir parametrenin geçirilmesine gerek yoktur, çünkü her zaman aynı nesneyi döndürür.

Sınıfta aradığınız her şeyi değiştirmek istediğinizde yeni bir yöntem tanımlayabilirsiniz. Sadece çalışmak için

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

değilim Yapmaya çalıştığınız şeyden emin olun, ancak Singleton modülünü kullanmadan tek bir örnek almak için birçok yol vardır. Ben şahsen bu yöntemle gibi

: Eğer biraz daha bilgi verebilir Eğer ne yaptığınızı yapmaya çalışıyoruz neden

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

yaklaşık yararlı olabilir.

+1

... ~ _ ~ –

+0

sen de tekil desen "kötü" neden okumalısınız okuyan ediyorsanız. Ruby gibi dillerde büyük bir anlaşma değil ama java/C# 'da önerilmiyor. – jonnii

+5

-1: Bu yeniden icat edilen tekerlek diş güvenli değildir. –