我有一种方法可以检查一个单词是否包含某个字母。字符串#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 发送到上述检查方法的 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);
}
})
},