我是 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_s
的 KaraokeSong
为此(请注意 +
和 "[#@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/