2011-09-16 7 views
1

私はクラスのためにRubyを学び、サンプルゲームを書いています。私はその後、別のクラスを持っている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 

:ここでは私のクラスのいずれかのビットがある、私はPlayerAIのインスタンスを作成し、そのインスタンスからaskIfTakeを呼び出そうとするとき

class PlayerAI < Player 
    def initialize 
     super 
    end 

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

問題は、ありますPlayerクラスで宣言されたメソッドを呼び出します。なぜこうなった?

答えて

4

これはできません。私はそれをテストしました(それがうまくいくことを知っていれば)私のために働きました:

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

これは正しい方法で行います。スペルミスがないか確認してください。ちなみに、Rubyでは、このメソッドは通常、アンダースコア:PlayerAI.new.ask_if_takeを使用します。または、疑問符:PlayerAI.new.will_take?を使用してください。

+0

ありがとうございました。私は単純なものを見落としていました。私がクラスを宣言したとき、私は実際にプレーヤークラスを宣言していました。問題のために1時間ほど探していましたが、その単純なタイプミスは見られませんでした。 –

+0

@AohmZ:時間の経過とともにタイプミスが早くなります。最終的には、「第六のプログラミング感覚」があり、それらが発生する前にバグを見つけることができます:) – Peter

+0

私はしばらくプログラミングしてきました。私はあなたが新しい言語に巻き込まれたときにあなたがものを見落とすと思います:) –