我正在尝试使用 Test-First 材料来学习 Ruby,但我被困在了这一点上。这是我的代码:
def translate(word)
word=word.split("")
while (!vowel(word[0])) do
first_letter=word[0]
word.each_index do |i|
word[i]=word[i+1]
end
word[word.length-1]=first_letter
end
return word.join + "ay"
end
def vowel(letter)
if letter == ("a" || "e" || "i" || "o" || "u")
return true
end
end
目标是通过查看单词是否以元音开头来实现将单词翻译为“pig latin”的函数。如果是这种情况,该函数只是附加“ay”。如果它以辅音开头,它将第一个字母放在单词的末尾,直到第一个位置有一个元音。
将我在 while 循环开始时保存的第一个字母分配给 word 的最后一个位置时,我遇到的问题是
word[word.length-1]=first_letter
这会导致程序无限循环。
测试基于字符串“banana”,处理后应为“ananabay”。在这种情况下,first_letter 包含“b”。所以我测试了为单词的最后一个位置分配不同的字母,除了“b”之外的所有东西都很好。我没有得到的是,while 块不取决于最后一个字母,而是取决于单词的第一个字母,它仍然会导致一个无限循环,将“b”分配给 word[word.length-1]。
我会非常感谢一些见解。