2014-02-12 91 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继承=>它将有两种方法(在你的情况“问'和'决定')。