Даже если был оператор goto
, вы не должны его использовать.Мало того, что это плохая форма, но это вызывает все виды головной боли для сопровождающих, поскольку ваша программа в конечном итоге становится трудной для следования.
Лучший подход - определить правильные структуры для ваших вопросов и правильных ответов, а затем повторитьэто просто, собирая результаты в структуру, которую вы можете использовать позже:
# Auto-flush output buffer
STDOUT.sync = true
questions = [
[ 'Is this a good question?', 'yes', 'no' ],
[ 'Is the sky blue?', 'yes', 'no' ],
[ 'Do hamsters fly?', 'no', 'yes' ]
]
answers_given = [ ]
questions.each do |question, *answers|
print question + ' '
while (true)
answer = gets
answer.chomp!
if (answers.include?(answer))
puts "Thanks!"
answers_given << (answer == answers.first)
break
end
puts "You must answer one of #{answers.join(', ')}!"
print question + ' '
end
end
questions.each_with_index do |(question, *answers), i|
puts "#{question} #{answers_given[i]}"
end