当我试图运行这个将字符串转换成拉丁语的方法时,我仍然会遇到同样的错误。
def pig_latin_word(word)
new_arr = []
letter = word.split("")
if letter[0] == "a" || letter[0] == "e" || letter[0] == "i" || letter[0] == "o" ||
letter[0] == "u"
new_arr << "yay"
else
letter[0].shift && new_arr << letter[0].push + "ay"
end
return new_arr.join
end# Test cases:
puts pig_latin_word("eat") # => "eatyay"
puts pig_latin_word("banana") # => "ananabay"
puts pig_latin_word("trash") # => "ashtray"发布于 2020-05-21 06:53:29
#shift和#push都是数组方法,您在letter[0]上调用它们,这是一个字符串。即使您将其修复为使用letter.shift和letter.push,也不会得到“垃圾”、“=>”烟灰缸,除非您从单词的开头循环并收集常量。
def pig_latin_word(word)
exp = /^[AEIOUaeiou]/
if word =~ exp
word + "yay"
else
word.each_char
.take_while {|c| c !~ exp }
.yield_self do |consonants|
word[consonants.length..-1] + consonants.join + "ay"
end
end
endrequire 'minitest/autorun'
class PigLatinTest < Minitest::Test
def test_word_that_begins_with_a_vowel
assert_equal("eatyay", pig_latin_word("eat"))
end
def test_word_that_begins_with_a_consonant
assert_equal("ananabay", pig_latin_word("banana"))
end
def test_word_that_begins_with_multiple_consonants
assert_equal("ashtray", pig_latin_word("trash"))
end
endmaxcal@pop-os ~/p/sandbox> ruby test.rb
Run options: --seed 59131
# Running:
...
Finished in 0.001205s, 2488.6889 runs/s, 2488.6889 assertions/s.
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips请参见:
发布于 2020-05-21 06:29:57
据我所见,你正在尝试转换成字母(字符串)。实际上,无论何时执行letter.shift,都是取消引用数组的第一个元素,即字符串。Shift适用于数组。
下面是一个代码片段,它巧妙地完成了您想要做的事情。只有最后一个测试用例不能返回您所发布的代码所建议的值。你说它应该返回“烟灰缸”,但是如果你移开第一个字母,把它附加到最后一个字母,然后加上“y”,你实际上应该得到"rashtay“。
def pig_latin_word(word)
return "#{word}yay" if word =~ /^[AEIOUaeiou]/
word_array = word.split('')
latin_word = "#{word_array[0..word_array.length].join}#{word_array.shift}ay"
return latin_word
end
puts pig_latin_word("eat") # => "eatyay"
puts pig_latin_word("banana") # => "ananabay"
puts pig_latin_word("trash") # => "rashtay"https://stackoverflow.com/questions/61927746
复制相似问题