1

私は Chris Pine のLearn to Program本の問題に取り組んでいます。Petいくつかのインスタンス メソッドを使用して class を定義しました。Petクラス定義の外で、文字列とクラスのインスタンスを受け取り、適切なインスタンス メソッドを実行するメソッドを構築しようとしています。

def dispatch(command, pet)
  dispatches = {'feed'       => pet.feed,
                'walk'       => pet.walk,
                'put to bed' => pet.putToBed,
                'rock'       => pet.rock,
                'toss'       => pet.toss}
  dispatches[command]
end

ただし、dispatchメソッドが実行されると、 に対応するメソッドだけでなく、ハッシュに表示されるすべてのインスタンス メソッドが実行されcommandます。これらは、コードに表示される順序で、行に到達する前に実行されdispatches[command]ます。

ここで何が間違っていますか?

4

2 に答える 2

3

はい、それは正しい動作です。

{'feed'       => pet.feed}

上記の行は、「メソッドpet.feedを呼び出し、その戻り値を使用してキー 'feed' に割り当てる」ことを意味します。後で呼び出すことができるコードのチャンクを作成するには、ラムダ (または同様のもの) を使用する必要があります。このようなもの:

def dispatch(command, pet)
  dispatches = {'feed'       => proc { pet.feed },
                'put to bed' => proc { pet.put_to_bed }}
  dispatches[command].call
end
于 2013-09-21T18:22:33.743 に答える
1

ハッシュの作成中に、すべてのメソッドが評価されます。メソッドの使用について読むことをお勧めしますsend( http://www.ruby-doc.org/core-2.0.0/Object.html#method-i-send ) 使用sendすると、次のようになります。

def dispatch(command, pet)
  pet.send(command)
end

メソッドの名前を調整する必要があることに注意してくださいputToBed

于 2013-09-21T18:23:29.897 に答える