我在使用Ruby pig latin翻译器翻译2个或更多单词时遇到了麻烦。我已成功地想出如何用我的函数translate翻译以元音,辅音或两个辅音开头的单词,并且我想创建第二个函数translate_words,它使用.map和第一个函数。
当字符串“eat pie”被提交时,输出为“eat pieay”。它只会更改第二个单词并且也会错误地进行更改(应该是“eatay iepay”)。我在没有运气的情况下看了很多其他解决方案。我对正则表达式仍然很新,所以这些解决方案有点过头了。
这个项目适用于RSpec,我在我的下面添加了测试代码。
这是我的代码:
def translate(input)
pig_string = ''
if input[0] =~ /[aeiou]/
return input + 'ay'
elsif input[0] =~ /[^aeiou]/ && input[1] =~ /[aeiou]/
return input[1..-1] + input[0] + 'ay'
elsif input[0..1] =~ /[^aeiou]/
return input[2..-1] + input[0..1] + 'ay'
else
return input[0] + input + 'ay'
end
end
def translate_words(multi_words)
word_count = multi_words.split.size
if word_count > 1
multi_words.map! do |word|
translate(word)
end
end
end
RSpec的:
it "translates two words" do
s = translate("eat pie")
expect(s).to eq("eatay iepay")
end
答案 0 :(得分:0)
根据bitsapien和Sergio Tulentsev的评论:
def translate_words(multi_words)
multi_words.split.map do |word|
translate(word)
end.join(' ')
end
map
将足以代替map!
。
translate_words('eat plie') #=> "eatay ieplay"