Ваш код работает по одной букве за раз:
"abcd"[0]
=> "a"
Тогда ваше условие сравнивает эту букву со словом:
"abcd"[0] == "duck"
# which is the same as:
"a" == "duck"
# which will never be true
Вы можете разбить строку на массив слови используйте Array#count
и Array#include?
для подсчета вхождений:
ANIMALS = ["horses", "ducks", "dogs"]
def count_a(string)
string.split(/\b/).count { |word| ANIMALS.include?(word) }
end
puts count_a("John and Mary like horses, ducks, and dogs.")
Для поиска совпадений внутри слов, например, «бульдог», считая собаку, вы можете использовать:
def count_a(string)
ANIMALS.inject(0) { |count, animal| count + string.scan(animal).size }
end