2014-11-25 4 views
1

아래의 프로그램은 미국 대통령과 프랑스 대통령의 나이와 이름을 취하는 시도입니다. 프랑스 인의 대통령이 나중에 그의 이름, 나이, 시민권 (내 생각이 아님)을 부르는 "bein sur"라고 말한다. 나는 프랑스 대통령의 캐치 프레이즈에 문제가있다. 여기루비 수퍼 클래스

class President 
    attr_accessor :name, :age 

    def initialize(name, age) 
    @name = name 
    @age = age 
    end 

    def name=(name) # setter 
    @name = name 
    end 

    def name # getter 
    @name 
    end 

    def age=(age) 
    @age = age 
    end 

    def age 
    @age 
    end 
end 

class FrancePresident < President 
    def self.citizenship 
    "La France" 
    end 

    def initialize(name, age) 
    super(name) 
    super(age) 
    end 

    def catchphrase 
    "bein sur" 
    end 

end 

class UnitedStatesPresident < President 
    def self.citizenship 
    "The Unites States of America" 
    end 
end 

나는 그의 캐치 프레이즈에 대해 가지고있는 인스턴스 메서드는이 문구를 말하는이 사람을 얻을 수있는 많은 중 마지막 시도이지만 불완전이, 내가이 호출을 정의하는데 같아 내 코드입니다 그의 이름과 나이를 얻는 슈퍼 클래스이지만이 인수 오류를 피하는 방법을 알지 못합니다.

ArgumentError 
wrong number of arguments (1 for 2) 
exercise.rb:4:in `initialize' 

exercise.rb:32:in `initialize' 

exercise_spec.rb:24:in `new' 

exercise_spec.rb:24:in `block (3 levels) in <top (required)>' 

저는 루비를 처음 사용 했으므로 어떠한 힌트 나 제안도 주시면 감사하겠습니다.

+1

'attr_accessor : name, : age' 때문에'def age/def age =()'(와'name'도) 중복됩니다. 다른 메소드를 자동으로 정의하는 것은'attr_accessor'가 성취하는 것과 똑같습니다. 직접 정의 할 필요가 없습니다. –

+0

오, 그래서'attr_accessor'는 getter와 setter에 내장 된 것과 비슷합니까? –

+0

캐치 프레이즈는 "bien sûr"을 읽어야합니다. :) 출처 : https://translate.google.com/#en/fr/of%20course – mhutter

답변

2

이 장착이 함께

super(name) 
super(age) 

을 :

super(name, age) 

Presidentinitialize 방법 파라미터 하나도 걸린다.

당신은 인수를 제거 할 수 있고, 매개 변수는 기본적으로 전달됩니다 :이 상속되기 때문에

super 

더 나은 아직, 그냥 President의 서브 클래스의 전체 initalize 방법을 제거합니다.

+1

또는'(name, age)'args를 완전히 생략하고 단순히'super'를 호출하면 하위 클래스 초기화 프로그램에 전달 된 동일한 인수가 수퍼 클래스에 전달됩니다. –

+1

@MichaelBerkowski'initialize' 메서드 전체가 하위 클래스에서 생략 될 수 있다는 것을 알았습니다. – August

+0

8 월까지 : President의 initialize 메서드는 하나가 아니라 두 개의 매개 변수를 사용합니다. 그래서 두 매개 변수가 같은 super()에 있어야합니다? 왜? –

관련 문제