Ваш код не работает, потому что переменная answer
, которую вы возвращаете, всегда равна первой в первой итерации (каждый вызов имеет свою локальную область видимости). Таким образом, возможное решение:
def ask_question(question)
print question
answer = STDIN.gets.chomp
answer.empty? ? ask_question(question) : answer
end
Обратите внимание, что эта рекурсивная конструкция хороша для языков, которые поддерживают оптимизацию хвостовых вызовов, но Ruby не форсирует ее, поэтому обычно создает новый кадр стека для каждой итерации и, в конце концов, будет работать. Я бы порекомендовал цикл, например:
def ask_question(question)
loop do
print question
answer = STDIN.gets.chomp
break answer unless answer.empty?
end
end