Я пытаюсь изучить Ruby с материалом Test-First, и я застрял на этом этапе. Это мой код:моя программа цикла бесконечно при назначении определенной строки переменной, и я не могу понять, почему
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». Если он начинается с согласного, он помещает первую букву в конце слова, пока в первой позиции не будет гласного.
У меня проблема начинается при назначении первого письма, которое я сохранил в начале цикла в то время как, к последней позиции слова, с
word[word.length-1]=first_letter
Это заставляет программу цикла на неопределенный срок.
Тест основан на строке «банан», после обработки следует читать «ananabay». В этом случае first_letter содержит «b». Поэтому я тестировал назначение разных букв на последнюю позицию слова, все, кроме «b», отлично работает. То, что я не понимаю, заключается в том, что с блоком while, не зависящим от последней буквы, но на первой букве слова, он все еще вызывает неопределенный цикл, назначая «b» слову [word.length-1].
Я был бы очень благодарен за понимание.
Вы не написать тест для метода 'vowel', не так ли? – Stefan
Нет, метод гласных не был в спецификации, но я думал, что это будет более структурировано таким образом. –
Это * более структурировано таким образом, но тест показал бы, что ваш метод работает не так, как ожидалось: 'vowel ('e') # => nil' – Stefan