ruby - ruby中的 `+`

标签 ruby

我是 ruby​​ 新手,正在阅读 Progamming Ruby并遵循其示例。

这是教 Inheritance and Messages 的代码:

class Song
  def initialize(name, artist, duration)
    @name=name;
    @artist=artist;
    @duration=duration;
  end

  def to_s
    "Song:#@name \t#@artist\t#@duration"
  end
end

class KaraokeSong < Song
  def initialize(name, artist, duration, lyrics)
    super(name, artist, duration);
    @lyrics=lyrics;
  end

  def to_s
    super + "[#@lyrics]";
  end
end

song=KaraokeSong.new("There for me", "Sarah", 2320, "There for me, every time I've been away...")
puts song.to_s

这段代码工作正常。

但是我发现如果我改变 to_sKaraokeSong为此(请注意 +"[#@lyrics]" 之间没有空格):

  def to_s
    super +"[#@lyrics]";
  end

我会得到错误:

in to_s': undefined method+@' for "[There for me, every time I've been away...]":String (NoMethodError)

然后我做了一个测试:

name="kk"
puts name +"sfds"

这段代码不会抛出任何错误。

有什么问题?

顺便说一句,我正在使用 ruby 2.0.0p247 (2013-06-27) [x64-mingw32]

最佳答案

您正在更改 String 上的方法调用。以前,您正在有效地执行此操作:

super.+(字符串)

现在,您正在执行 super(+string)+@ 方法未在 String 上定义(尽管它是在数字上定义的,并且只返回一个正数),这就是您看到此错误的原因。

关于ruby - ruby中的 `+`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983130/

相关文章:

ruby-on-rails - Ruby on Rails 第一步

Ruby:拆分:正则表达式过早结束

ruby-on-rails - Rails NoMethodError(时间 :Class): not so trivial error 的未定义方法 `something '

ruby-on-rails - Ruby:什么会导致同一代码块的执行在一遍又一遍地运行时随着时间的推移而变慢?

ruby - 在 Ruby 中创建一个双叉守护进程

ruby - 如何在 s3 上使用 ruby​​ aws-sdk 创建目录结构?

ruby-on-rails - Ruby 源文件名与 `require` 冲突

jquery - 如何在 View 文件夹中使用js文件

ruby-on-rails - 有哪些学习 Rails 代码库内部结构的好资源?

ruby - google_drive 和 google-api-client 中的法拉第冲突