不是+
运营商?为什么不定义?
这是我的代码:
Class Song
@@plays = 0
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
@plays = 0
end
attr_reader :name, :artist, :duration,
attr_writer :name, :aritist, :duration
def play
@plays += 1
@@plays += 1
"This Song: #@plays play(s). Total #@@plays plays."
end
def to_s
"Song: #@name--#@artist (#@duration)"
end
end
答案 0 :(得分:4)
首先,此代码甚至不运行:第1行的class
需要拼写为小写c,并且在语句中的最后一项之后不能使用逗号({{1行)。在修复并运行attr_reader
或NoMethodError
或Song.new
之后,我才收到Song#play
。
无论如何,当您尝试将任何添加到Song#to_s
值时,您将始终获得NoMethodError
:
nil
因此,您可能尝试向未初始化的实例变量添加内容......或者它可能是任何内容。如果您希望得到正确的帮助,您总是需要发布完整的最小代码来复制错误。
答案 1 :(得分:3)
+
是根据数字(以及其他内容)定义的。但是,正如错误消息所示,它未在nil
上定义。这意味着你无法做nil + something
,为什么会这样做?
话虽如此,您实际上并未在您显示的代码中的任何位置调用nil + something
(您正在将@plays
和@@plays
初始化为0,而您就是不要在任何时候将它们设置为nil
。事实上,一旦删除了两个语法错误,您的代码就会运行正常(Class
应该是class
并且:duration
之后应该没有逗号)。因此,错误不在您显示的代码中。
答案 2 :(得分:0)
也许你应该在初始化方法中加入@@plays = 0
?