Обработка ответов отсутствует в следующем коде, но вы можете контролировать только один правильный ответ
class Question
def initialize(text)
@text = text
@answers = []
@correct = nil #index of the correct answer inside @answers
end
def self.define(text, &block)
raise ArgumentError, "Block missing" unless block_given?
q = self.new(text)
q.instance_eval(&block)
q
end
def wrong( answer )
@answers << answer
end
def right(answer )
raise "Two right answers" if @correct
@answers << answer
@correct = @answers.size
end
def ask()
puts @text
@answers.each_with_index{|answer, i|
puts "\t%2i %s?" % [i+1,answer]
}
puts "correct is %i" % @correct
end
end
def question( text, &block )
raise ArgumentError, "Block missing" unless block_given?
Question.define(text, &block)
end
Теперь вы можете определить свой вопрос с помощью синтаксиса блока:
question( 'Who was the first president of the USA?' ) {
wrong 'Fred Flintstone'
wrong 'Martha Washington'
right 'George Washington'
wrong 'George Jetson'
}.ask
Вы также можете использовать другое определение вопросов:
q = Question.new( 'Who was the first president of the USA?' )
q.wrong 'Fred Flintstone'
q.wrong 'Martha Washington'
q.right 'George Washington'
q.wrong 'George Jetson'
q.ask