新手问题 问大家一个 programming ruby 第二版第三章的一个问题

p0p3 · 2013年05月11日 · 最后由 chenge 回复于 2013年05月11日 · 2586 次阅读

第三章中为了说明使用 super 来调用父类中的方法,举了一个例子

“我们正确地显示了@lyrics 这个实例变量,但是这样做直接在子类里访问了父类的实例变量,为什么这样实现 to_s 方法不好呢?答案与良好的编程风格有关,会使得我们和父类的实现紧密的绑在一起。假如我们决定修改 Song 类以毫秒保存时长。突然间,KaraokeSong 开始报告非常荒谬的时长。“My Way”的卡拉 ok 版本有 3750 分钟长,这想法太恐怖了”

这个例子是不是举的不太合适啊,使用 super 调用父类的方法,如果修改 Song 类以毫秒保存时长,还不是一样会显示 3750 分钟

高人解释一下啊

你把代码贴出来可能清楚点

class KaraokeSong

#...

def to_s

"KS: #@name--#@artist(#@duration){#@lyrics}"

end

end

song = KaraokeSong.new("My Way", "Sinatra", 225,"And now,the...")

song.to_s ->"KS: My Way--Sinatra(225){And now,the...}"

原来直接把父类的方法 copy 过来

后来采用 super 引用 class KaraokeSong <Song

def to_s

super+"{#@lyrics}"

end

end

song = KaraokeSong.new("My Way", "Sinatra" ,225, "And now,the...")

song.to_s ->"Song:My Way--Sinatra(225){And now,the...}"

我的意思是他最后说段那段话不太恰当 super 调用父类的方法,如果修改 Song 类以毫秒保存时长,还不是一样会显示 3750 分钟

好像是有问题

没有翻到楼主引用这段...

需要 登录 后方可回复, 如果你还没有账号请 注册新账号