2014-05-10 5 views
0

두 번째 이니셜 라이저에 대한 주석을 제거하면 "잘못된 인수 수"가 표시되는 이유는 무엇입니까? Ruby 1.9.3을 사용하고 있습니다. 어떤 도움을 주셔서 감사합니다!Ruby : 부모 클래스에 초기화를 추가하면 "잘못된 인수 수"가됩니다.

class Parent 
    def initialize 
    puts "Parent initialize" 
    end 

# def initialize(str) 
# puts "Parent initialize: #{str}" 
# end 
end 

class Child < Parent 
    def initialize 
    puts "Child initialize" 
    super() 
    end 
end 

Child.new 
+1

'슈퍼'만 사용하십시오. –

+1

왜 그 오류가 나타나지 않을 것이라고 생각하십니까? 주석 처리 된 예제에서'initialize'는 1 인자를 취합니다. 인자없이'super()'를 호출합니다. 그것은 "잘못된 인수"입니다. (편집 : nvm, OP는 한 번에 메서드를 초기화하는 것을 의미합니다) –

답변

3

루비에서 메소드 오버로딩을 수행 할 수 없습니다. 두 번째 initialize 메서드의 주석 처리를 Parent에서 수행하면 첫 번째 메서드를 덮어 쓰게되고 initialize 메서드가됩니다.

2

루비에는 메소드 오버로딩이 없습니다. 대신 기본 인수를 사용할 수 있습니다 :

class Parent 
    def initialize(str = nil) 
    if str.nil? 
     puts "Parent initialize" 
    else 
     puts "Parent initialize: #{str}" 
    end 
    end 
end 

class Child < Parent 
    def initialize 
    puts "Child initialize" 
    super() 
    end 
end 

Child.new 
관련 문제