2013-01-13 37 views
0

我有一个方法来检查一个单词是否包含某个字母。字符串#include?方法应该返回true如果字符串对象包含任何位置的字母。但是,如果字母(char_clicked)和单词第一个字母(final_word)中的字母匹配,我的方法只返回true。例如,如果final_word参数是西班牙语,如果“S”是char_clicked,则该方法仅返回true,如果char_clicked是“_pain”中的任何一个,它将返回falseString#include?只检查第一个位置

您能缓解我的痛苦并告诉我我在做什么错?

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 

看到,因为这个问题证实,包括第一反应呢?应该按照上面显示的方式工作,我提供的更多信息可能有助于解释为什么它不能像预期的那样工作

在发送到correct_guess之前,final_word正在被拉出会话?检查方法。所述char_clicked被拉出参数的

​​

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); 
     } 
     }) 
    }, 
+0

你能同时打印'char_clicked' variabale? – tdgs

+1

尝试'char_clicked.strip'(去除换行符和其他意外的前导和尾随空白)。 – steenslag

+0

@steenslag它不能解决问题 – BrainLikeADullPencil

回答

1

也许include?某处覆盖(monkeypatched)。以下工作?

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

正则表达式匹配方法也不太可能被覆盖。

+0

这是工作,它告诉我,这封信是否包含在单词中。但是,如果我正在检查包含?方法在同一个应用程序的控制台中,它在那里工作得很好,那么它不应该被覆盖,如果它,因为控制台使用相同的应用程序...如果include在应用程序中被覆盖,那么当我测试它时,它也会在rails控制台中被覆盖 – BrainLikeADullPencil

1

这是一个upcase问题。 final_word总是一个专有名称,“巴西”,只有第一个字母大写。但是,char_clicked总是大写。 include?方法的匹配匹配只有在匹配的情况下才返回true。如果我改变了检查,如果它包括char_clicked前进行final_word大写的方法,它返回预期真或假

final_word.upcase.include?(char_clicked) 
相关问题