【问题标题】:Ruby Multiple Words Pig LatinRuby 多字猪拉丁语
【发布时间】:2017-05-29 14:06:56
【问题描述】:

我在使用 Ruby pig 拉丁语翻译器翻译 2 个或更多单词时遇到问题。我已经成功地弄清楚了如何使用我的函数 translate 翻译以元音、辅音或两个辅音开头的单词,并且我想创建第二个函数 translate_words,它将 .map 与第一个函数一起使用。

当字符串“eat pie”被提交时,输出为“eat pieay”。它只改变了第二个词,而且做错了(应该是“eatay iepay”)。我已经在 SO 上查看了多个其他解决方案,但没有运气。我对正则表达式还是很陌生,所以这些解决方案有点超出我的想象。

这个项目适用于 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

【问题讨论】:

  • 在代码中包含您的输入、预期输出和实际输出。尽可能轻松地复制-粘贴-运行-查看。
  • 您的代码只需稍作改动即可正常工作。请改用multi_words.split.map!
  • @bitsapien:“工作得非常好”——嗯,差不多。当字符串由一个单词组成时,它什么也不做。一个词串是多词串的一种特殊情况:)
  • 我怀疑你也需要join你的数组。
  • @bitsapien 感谢您的建议,但它仍在输出“eat pieay”。如果有帮助,我将在此处作为 Odin 项目的 Test-First Ruby 项目的一部分进行此操作:theodinproject.com/courses/web-development-101/lessons/…

标签: ruby


【解决方案1】:

根据上面的 cmets,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"

【讨论】:

  • 什么时候需要使用map! 而不是map?。看起来它无法通过测试并且它仍在输出“eat pieay”。如果有帮助,我将在此处作为 Odin 项目的 Test-First Ruby 项目的一部分进行此操作:theodinproject.com/courses/web-development-101/lessons/…
  • @IsaiahO:不,它不输出“eat pieay”。一定是你没有正确复制它或什么的。
  • @IsaiahO:你的测试还有什么期望?完全翻译的字符串,还是翻译后的单词数组?调整代码或测试以相互匹配。
  • @SergioTulentsev RSpec 文件需要一个完全翻译的字符串。自从我尝试更改翻译功能和多词功能后,这真是令人沮丧,但我一直得到“吃派”作为输出。
  • @IsaiahO 需要修改对象时使用map!。在这种情况下不需要,所以只需使用map
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
相关资源
最近更新 更多