2010-11-18 3 views
0

나는 루비에 관한 초보자입니다. 싱글 톤 클래스의 초기화 함수에 인수가 없어야합니까?루비의 싱글 톤에 관한 문제

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

`초기화 :

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

내가 루비도 말해 맞았해야한다고 생각 : 여기 내 코드입니다 '인수 잘못된 번호 (1 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

답변

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

... ~ _ ~ –

+0

당신은 또한 싱글 톤 패턴이 "나쁜"왜 위로 읽어야 공부하는 경우. 루비와 같은 언어에서는 큰 문제가 아니지만 java/C#에서는 권장되지 않습니다. – jonnii

+5

-1 :이 다시 발명 된 휠은 스레드로부터 안전하지 않습니다. –

관련 문제