2014-02-12 219 views
0

我有兩個文件:基本類繼承

answer.rb

class Answer 
    def decision(string) 
    if string == 'Richard' 
     puts "Hello" 
    else 
     puts "I dont know you" 
    end 
    end 
end 

question.rb

require './answer' 

class Question < Answer 
    puts "What is your name?" 
    response = gets.chomp 
    puts decision("#{response}") 
end 

如何從Question類訪問方法Answer類指定的文件是不足夠的?如果我刪除類Answer,那麼一切正常。

回答

2

只是做

puts self.new.decision(response) # no need for string interpolation. 

#decisionAnswer類的一個實例方法,所以這將是可作爲類Question的一個實例方法。現在在課堂上,自己被設置爲本身,因此像你這樣的裸方法調用將會拋出錯誤,因爲找不到方法。因此,您必須創建類AnswerQuestion的實例,並且在該實例上必須調用該方法。

完整代碼:

class Answer 
    def decision(string) 
    if string == 'Richard' 
     puts "Hello" 
    else 
     puts "I dont know you" 
    end 
    end 
end 

class Question < Answer 
    puts "What is your name?" 
    response = gets.chomp 
    puts self.new.decision(response) 
end 

運行代碼:

(arup~>Ruby)$ ruby so.rb 
What is your name? 
arup 
I dont know you 

(arup~>Ruby)$ 
+0

好的謝謝,但你能解釋那裏發生了什麼? – Richlewis

+0

謝謝,這有助於 – Richlewis

+1

@Richlewis你應該爲你的'Question'類添加一個實例方法(例如'def ask')。在這種情況下,你可以*調用'decision'。然後執行'Question.new.ask'。 – Mischa

3

爲了使您的工作,例如,你需要打電話給你的代碼。例如,您可以用下面的代碼修改你Question類:

#question.rb 

require './answer' 

class Question < Answer 

    def ask 
    puts "What is your name?" 
    response = gets.chomp 

    puts decision(response) 
    end 
end 

Question.new.ask 

繼承將是你的問題的情況下(即Question.new)將從Answer繼承=>它將有兩種方法(在你的情況「問'和'決定')。