Это, кажется, работает хорошо. Что может вас запутать, так это то, что если соответствия нет, ruby вернет последнее вычисленное выражение, которое в данном случае является списком.
Я не уверен, что вы хотите вернуть сюда в случае сбоя, но это вернет true / false
def self.wordmatch(input, list)
list.each {|word|
if (word =~ /#{input}/i)
puts "#{input} => #{word}"
return true
end
}
return false
end
Следующий тестовый код
words = %w[a b c]
matches = %w[a b c d]
matches.each do |match|
puts "Testing #{match} = #{wordmatch(match, words)}"
end
Дает следующие результаты
Testing a = true
Testing b = true
Testing c = true
Testing d = false
EDIT
Исходя из комментариев, похоже, это работает точно так, как рекламируется.
def wordmatch(input, list)
list.each {|word|
if (input =~ /#{word}/i)
puts "#{input} => #{word}"
return 'MATCH'
end
}
return nil
end
list = ["hate", "indifference", "love", "foo"]
input1 = "I love summer"
input2 = "I endure summer"
puts "Testing #{input1} = #{wordmatch(input1, list)}"
puts "Testing #{input2} = #{wordmatch(input2, list)}"
И дает следующие результаты
I love summer => love
Testing I love summer = MATCH
Testing I endure summer =