2013-01-13 33 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) 
相關問題