Я получаю "NoMethodError: неопределенный метод `%' для nil:NilClass" для следующего блока кода:
class Timer
attr_accessor :seconds
def initialize
@seconds = 0
end
def time_string
if seconds < 10
return "00:00:0" + seconds.to_s
elsif seconds < 60
return "00:00:" + seconds.to_s
elsif seconds < 540
minutes = seconds / 60
seconds %= 60
#seconds = seconds - (minutes * 60)
return "00:0" + minutes.to_s + ":0" + seconds.to_s
end
end
def timer
@timer
end
end
Я знаю, что «секунды» — это Fixnum, потому что я получаю ошибку NoMethod: Fixnum, когда пытаюсь #поставить секунды без #to_s. Кроме того, операция «/» над «секундами» в предыдущей строке работает нормально. Так почему же я получаю сообщение об ошибке NoMethod:nilclass?
Почему я вообще получаю сообщение об ошибке? Разве «%» не должно работать везде, где работает «/»?
Работает следующий код:
if seconds < 10
return "00:00:0" + seconds.to_s
elsif seconds < 60
return "00:00:" + seconds.to_s
elsif seconds < 540
minutes = @seconds / 60
seconds = @seconds % 60
return "00:0" + minutes.to_s + ":0" + seconds.to_s
end
Это как-то связано с переменными экземпляра и моим непониманием переменных экземпляра. хотел бы знать, как ноль попал туда.
%
к объектуnil
, что здесь явно не так, поскольку в противном случаеseconds / 60
потерпит неудачу. Таким образом, сообщение об ошибке должно быть применимо к какой-то другой части кода, которую вы, возможно, не показываете. Вы говорите, что код состоит только из этого и файла rake. Какой рейк-файл? В файле rake может быть много кода. - person lurker   schedule 28.08.2014self.seconds %= 60
- person Jaugar Chang   schedule 28.08.2014