【发布时间】:2013-01-13 09:44:45
【问题描述】:
我有一种方法可以检查单词是否包含某个字母。字符串#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)
....
Ajax 请求发送 char_clicked 到上述检查方法
$.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);
}
})
},
【问题讨论】:
-
你还能打印
char_clickedvariabale吗? -
试试
char_clicked.strip(删除换行符和其他意外的前导和尾随空格)。 -
@steenslag 它不能解决问题
-
@tdgs puts char_clicked 打印任何被点击的字母,但它返回 false,除非它是单词中的第一个字母
-
顺便说一句,该应用程序只是一个 enki 博客 github.com/xaviershay/enki/blob/master/Gemfile,我正在添加它,即没有很多源代码,而且我看不出 gem 作者有任何理由覆盖包含?
标签: ruby