如何在Ruby中正确覆盖实例方法?

时间:2011-09-16 04:30:47

标签: ruby methods

我一直在学习Ruby课程并且一直在编写示例游戏。这是我的一个课程:

  class Player
    def askIfTake
      puts("Would you like to take a card? > ")
      input = gets.chomp
      input.downcase!
      if input == "y" or input == "yes"
        return 1
      elsif input == "n" or input == "no"
        return 0
      else
        puts("Invalid input. Please type y or n.")
        return askIfTake
      end
    end
  end

然后我又开了一个班:

  class PlayerAI < Player
    def initialize
      super
    end

    def askIfTake
      puts("this is an AI")
      return rand(2)
    end
  end

问题是,当我创建一个PlayerAI实例并尝试从该实例调用askIfTake时,它会调用Player类中声明的方法。为什么会这样?

1 个答案:

答案 0 :(得分:4)

这是不可能的。我测试了它(知道它会好的)它对我有用:

>> PlayerAI.new
=> #<PlayerAI:0x00000103889308>
>> PlayerAI.new.askIfTake
this is an AI

您正在以正确的方式执行此操作。检查您是否有任何拼写错误。顺便说一下,在Ruby中,该方法通常使用下划线:PlayerAI.new.ask_if_take。或者更好,带有问号:PlayerAI.new.will_take?