2009-11-07 2 views
6

에서 나는 우리가 자기 참조 생성자의이 종류가 있습니까이 자바는 초기화 루비

public constructor_name() { 
    this(param) 
} 

public constructor_name(int param) { 
    this.param = param 
} 

어떤 루비에 대해이하는 데 사용?

답변

9

Java가 유효하지는 않지만 선택 사항 인 인수를 원한다고 생각합니다. 이 경우, 당신도 바로 인수를 기본 값

def initialize(param=9999) 
... 
end 

을 줄 수 또는 당신은 플랫 인수 사용할 수 있습니다 루비는 동적 언어이기 때문에

def initialize(*params) 
    param = params.pop || 9999 
end 
+0

또한 'hash named arguments'를 사용할 수 있습니다. – rogerdpack

12

, 당신은 여러 생성자를 가질 수 없습니다를 (또는 해당 문제에 대해 생성자 체인을 수행하십시오). 예를 들어, 다음 코드에서 :

class A 
    def initialize(one) 
    puts "constructor called with one argument" 
    end 
    def initialize(one,two) 
    puts "constructor called with two arguments" 
    end 
end 

매개 변수가 다른 2 개의 생성자가 있어야합니다. 그러나 마지막으로 평가 된 클래스의 생성자가됩니다. 이 경우 initialize(one,two)입니다.

+6

왜 다중 생성자를 사용할 수 없다는 사실은 Ruby가 동적 언어와 관련이 있다고 주장 하시겠습니까? 내가 알 수있는 한, 이것은 언어가 동적인지 아닌지에 관계없는 디자인 결정입니다. – Cumbayah

+1

@Cumbayah 이것을 되살려 주어서 미안하지만, 미래의 독자들을 위해 : 저자는 (어떤면에서) 대화 형 세션 에서처럼 Ruby가 실행된다는 것을 의미했을 수 있으므로 함수를 두 번 정의하면 이전 것을 대체합니다. – Kroltan