Sinatraで作成された絞首刑執行人アプリのRubyコードをステップスルーしています。post "/check" do
具体的には、以下のパス/関数を見ています。関数の最初の2つのステップは予測可能です。つまり、final_word
変数を表示し、次に変数を表示しchar_clicked
ますが、デバッガーはこのHash.newを表示します。
Hash.new {|hash,key| hash[key.to_s] if Symbol === key }
関数に進む前に。post "/check"
この時点でなぜ新しいハッシュを作成しているのかわかりません。これはコードでは明示されておらず、なぜこれが舞台裏で行われるのかは私にはわかりません。以下にcorrect_guessメソッドも含めました。これは、「
final_word = session[:word]
(rdb:3) n
hangman.rb:79
char_clicked = params[:char_clicked]
(rdb:3) n
/Users/mm/.rvm/gems/ruby-1.9.2-p290@rails3tutorial/gems/sinatra-1.3.3/lib/sinatra/base.rb:916
Hash.new {|hash,key| hash[key.to_s] if Symbol === key }
(rdb:3) n
hangman.rb:80
correct_guess = Game.correct_guess?(char_clicked, final_word)
パスを確認してください
post "/check" do
debugger
final_word = session[:word]
char_clicked = params[:char_clicked]
correct_guess = Game.correct_guess?(char_clicked, final_word)
if correct_guess
session[:revealed_word] = Word.reveal(session[:revealed_word], char_clicked, final_word)
session[:chars_left] = Word.chars_left(session[:revealed_word])
else
session[:incorrect_guesses] += 1
end
win = Game.win?(session[:chars_left], session[:incorrect_guesses])
{:word => session[:revealed_word], :correct_guess => correct_guess, :incorrect_guesses => session[:incorrect_guesses], :win => win}.to_json
end
ゲームcorrect_guessメソッド
def correct_guess?(char_clicked, final_word)
final_word.include?(char_clicked)
end