【问题标题】:How do I properly override instance methods in Ruby?如何正确覆盖 Ruby 中的实例方法?
【发布时间】:2011-09-16 04:30:47
【问题描述】:

我一直在为一堂课学习 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 类中声明的方法。为什么会这样?

【问题讨论】:

    标签: ruby methods


    【解决方案1】:

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

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

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

    【讨论】:

    • @AohmZ:随着时间的推移,你会更快地挑选错别字;最终你将拥有“第六种 [编程] 意识”,并且能够在错误发生之前发现它们 :)
    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 2016-10-11
    • 2023-04-05
    • 2012-07-19
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多