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
目標は、単語が母音で始まるかどうかを調べて、単語を「豚ラテン語」に翻訳する関数を実装することです。この場合、関数は単に「ay」を追加します。子音で始まる場合、最初の文字が最初の位置に母音になるまで、単語の最後に配置されます。
私が抱えている問題は、 while ループの開始時に保存した最初の文字を単語の最後の位置に割り当てるときに始まります。
word[word.length-1]=first_letter
これにより、プログラムが無期限にループします。
テストは文字列 "banana" に基づいており、処理後に "ananabay" になるはずです。この場合、first_letter には「b」が含まれます。そこで、単語の最後の位置に別の文字を割り当ててテストしましたが、「b」以外はすべてうまくいきました。私が得られないのは、while ブロックが最後の文字に依存せず、単語の最初の文字に依存している場合でも、"b" を word[word.length-1] に割り当てる無限ループが発生することです。
いくつかの洞察に非常に感謝します。