【发布时间】:2014-08-27 23:40:56
【问题描述】:
我收到以下代码块的“NoMethodError: undefined method `%' for 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
我知道 'seconds' 是一个 Fixnum,因为当我尝试在没有 #to_s 的情况下 #puts seconds 时出现 NoMethod: Fixnum 错误。此外,前一行中“秒”上的“/”操作也可以正常工作。那么为什么我会收到 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
它与实例变量有关,我不了解实例变量。很想知道零是如何进入那里的。
【问题讨论】:
-
以上应该可以正常工作,请参阅:rubyfiddle.com/riddles/dbaa9
-
谢谢。真让人抓狂。
-
更新显示整个类,而不仅仅是方法。注释掉的行会产生相同的错误。就像所有的操作员突然停止工作一样。
-
代码有效,见这里:rubyfiddle.com/riddles/5e554。您的问题在我认为的其他地方。
-
我看到了,并用 rubyfiddle 代码代替了我自己的代码。得到了同样的结果。不知道问题可能出在哪里,这是一个教程,所以实际上只有这个和 rake 文件。
标签: ruby nomethoderror fixnum