为什么我得到“未定义的方法'+'为nil:NilClass”?

时间:2010-08-21 13:04:51

标签: ruby

不是+运营商?为什么不定义?

这是我的代码:

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

3 个答案:

答案 0 :(得分:4)

首先,此代码甚至不运行:第1行的class需要拼写为小写c,并且在语句中的最后一项之后不能使用逗号({{1行)。在修复并运行attr_readerNoMethodErrorSong.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

相关问题