0

単語に特定の文字が含まれているかどうかを確認する方法があります。文字列#include? 文字列オブジェクトの任意の位置に文字が含まれている場合、メソッドは true を返すはずです。ただし、私のメソッドは、文字 (char_clicked) と単語の最初の位置にある文字 (final_word) が一致した場合にのみ true を返します。たとえば、final_word パラメーターがスペインの場合、このメソッドは「S」が char_clicked の場合にのみ true を返し、char_clicked が「_pain」のいずれかである場合は false を返します。

私の痛みを和らげて、私が間違っていることを教えてください...

def correct_guess?(char_clicked, final_word)
      puts char_clicked, final_word      #p, Spain  
      puts final_word.is_a?(String)      #true
      puts "checking if string"
      puts final_word.include?(char_clicked)  #false
  final_word.include?(char_clicked)
end

アップデート

文字列を配列にして文字をチェックしても同じ結果が得られます

puts final_word.split("").include?(char_clicked)

ただし、そのアプリケーションのコンソールでインクルードを使用すると、正常に動作します

>> s = "brazil"
=> "brazil"
>> s.include?("z")
=> true

この質問への最初の回答として、それが含まれていることを確認していますか? 上記のように機能するはずです。期待どおりに機能しない理由を説明できる情報をさらに提供します

final_word は、 correct_guess に送信される前にセッションから引き出されていますか? チェック方法。char_clicked はパラメーターから引き出されます

def check 
    final_word = session[:word]
    char_clicked = params[:char_clicked]
    correct_guess = Game.correct_guess?(char_clicked, final_word)
    ....

char_clicked を上記の check メソッドに送信する Ajax リクエスト

$.ajax({
        url: "/check",
        type: "POST",
        data: {char_clicked: this.get("char_clicked")},
        success: function(response) {
          console.log(response);
          var json = $.parseJSON(response);

          if (response.incorrect_guesses >= _this.get("threshold")) _this.set({lost: true});
          if (response.win) _this.set({win: true});

          _this.trigger("guessCheckedEvent", response);
        }
      })
    },
4

2 に答える 2

1

これはアップケースの問題でした。final_wordは常に固有名「ブラジル」で、最初の文字だけが大文字になっています。ただし、char_clickedは常に大文字でした。メソッドの等式一致include?は、大文字と小文字が一致した場合にのみtrueを返しました。char_clickedが含まれているかどうかを確認する前に、final_wordを大文字にするようにメソッドを変更すると、期待されるtrueまたはfalseが返されました。

final_word.upcase.include?(char_clicked)
于 2013-01-13T18:39:37.987 に答える
1

たぶんinclude?どこかでオーバーライドされています(モンキーパッチ)。以下は機能しますか?

def correct_guess?(char_clicked, final_word)
  final_word =~ /#{char_clicked}/i
end

regex-matcher メソッドもオーバーライドされる可能性は低いです。

于 2013-01-13T10:48:40.720 に答える