keywords = ["fish", "blue"]
phrase = 'one fish two fish red fish blue fish'
actual = ???
assert_equal 'one FISH two FISH red FISH BLUE FISH', actual
Короче говоря, используя уменьшение, что я должен заменить ???с выше.
В длинных есть способ использовать, чтобы уменьшить, чтобы изменить каждое слово в строке, для которой выполняется условие.В этом случае я хочу upcase
каждый word
в phrase
, который включен в keywords
.Я мог бы представить, что мог бы использовать этот метод с некоторыми изменениями, чтобы удалить каждый экземпляр слова или заменить его.Я знаю о sub
и gsub
, но я делаю набор задач, который наводит меня на мысль, что это возможно с помощью Reduce.Я был в документах безрезультатно.
Меня интересуют только решения, использующие уменьшение, или объяснение, почему в этом случае сокращение не работает.
Я заставил его работать, используя,
actual = keywords.reduce('one fish two fish red fish blue fish'){|memo,word| memo.gsub(word,word.upcase) }
Комментарий Гаррета направил меня в правильном направлении.Возможно, я был неясен, изначально я просто не хотел решения gsub
за пределами reduce
.Спасибо за помощь!