Если вы просмотрите все тесты, вы увидите, что кроме test_start_at_6
каждый тест, по сути, вызывает wait
некоторое количество раз, а затем проверяет правильное время в clock.time
.
Если вы посмотрите на свой код, clock.time
генерируется attr_reader
, и поэтому все, что он когда-либо сделает, вернет текущее значение @time
.Таким образом, у вас остается wait
как место для реализации поведения, необходимого для прохождения тестов.
Еще одна вещь, на которую следует обратить внимание, это то, что вы в настоящее время слишком усложняете метод wait
.Он никогда не вызывается с какими-либо параметрами, поэтому параметр time
не нужен.Итак, для начала упростите это до:
def wait
@time += 1
end
Далее, отойдите от кода и составьте небольшой список, показывающий для каждого текущего времени, какое следующего временидолжно быть после wait
вызвано.Затем вы можете подумать о том, как изменить wait
так, чтобы он соответствовал требуемому поведению.
С точки зрения того, использовать ли оператор if
или case
, все, чего вы могли бы достичь, используя case
оператор также может быть сделан с if
в качестве альтернативы.Лучше всего подумать о наиболее распространенном использовании оператора case
, который предназначен для проверки одной и той же переменной на различные возможные значения.то есть выражение case
case @time
when 1
puts "One o'clock"
when 2
puts "Two o'clock"
else
puts "Later!"
end
совпадает с:
if @time == 1
puts "One o'clock"
elsif @time == 2
puts "Two o'clock"
else
puts "Later!"
end
Часто, когда вы просто решаете, какой должна быть логика, вы пишете это какОператор if
, а затем, как только он заработает, вы поймете, что его можно более элегантно выразить как оператор case
.В этом упражнении if
должно быть в порядке.