Для чего в Домашке 12-4 ([homework_id=50]) написана проверка @current_question?
Я прикрепил zip папку, со своим вариантом. Подскажите, верен он или нет.
У нас объект Test хранит свое текущее состояние: он знает сколько уже набрал очков юзер (@points) и индекс текущего вопроса в массиве вопросов (этот индекс и хранится в @current_question).
В основном коде программы создается объект класса Test и в цикле опрашивается:
# основной цикл программы
while test.next_question == true do
#...
При каждом вызове метода next_question указатель @current_question увеличивается на единицу до тех пор, пока не дойдет до конца массива вопросов (эти проверки и идут внутри метода next_question при каждом вызове).
Ваша программа сделана немного по-другому. И хотя судя по результату работы она верная, есть несколько некрасивых мест, до которых вы с опытом и сами дойдете:
Test#next_question(name) судя по названию должен лишь задавать "следующий вопрос", а вы весь игровой цикл в нем реализовали. Name#user_input во-первых при каждом вызове выполняет заново код, который нужно выполнить один раз (проставить кодировки, записать введенное имя), а во-вторых вы его используете дважды в коде программы. По сути программы нужно хранить только имя — строку. Но класс Строка уже реализован в руби, так и используйте ее. Не нужно придумывать свой класс, если он повторяет существующие.
Как работает (@current_question) мне понятно. Я наверное не совсем правильно поставил вопрос.Просто мне показалось, что можно обойтись одним (@points) и не использовать (@current_question) или я не прав? Кстати прикрепил исправленный (ZIP) вариант. Гляньте пожалуйста.
в @points хранится счет пользователя (сколько очков он набрал), а как узнать на каком сейчас вопросе находится пользователь? Вот для этого и нужен указатель.
В новом варианте вы избавились от лишнего класса Name, но весь игровой цикл реалзован по-прежнему в Test#next_question. Здесь достаточно будет просто дать методу подходящее имя (например play).