gpt4 book ai didi

ruby - 在 parent 的内部状态中闲逛

转载 作者:数据小太阳 更新时间:2023-10-29 08:51:41 25 4
gpt4 key购买 nike

tl:dr 解耦是如何工作的?可能需要一些小例子

我正在阅读 Programming Ruby - The Pragmatic Programmer's Guide。(http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html)

有一个关于如何为 Song 的子类 KaraokeSong 实现 to_s 的例子。

class KaraokeSong < Song
# ...
def to_s
"KS: #{@name}--#{@artist} (#{@duration}) [#{@lyrics}]"
end
end
aSong = KaraokeSong.new("My Way", "Sinatra", 225, "And now, the...")
aSong.to_s » "KS: My Way--Sinatra (225) [And now, the...]"

现在他们说这样做很糟糕:

Say we decided to change Song to store the duration in milliseconds. Suddenly, KaraokeSong would start reporting ridiculous values. The idea of a karaoke version of ``My Way'' that lasts for 3750 minutes is just too frightening to consider.

相反,你应该用 super 定义 to_s:

def to_s
super + " [#{@lyrics}]"
end

现在当@duration 变量仍然以毫秒为单位存储歌曲持续时间时,新的to_s 只是调用父方法如何解决问题?它仍然返回 3750 分钟,不是吗?

我想我不太明白这两者之间的区别。

最佳答案

假定 Song 将负责其 @duration 的正确输出。

如果我们决定更改 Song 以以毫秒为单位存储持续时间,我们只需更改 Song#to_s 方法,而不必更改 to_s 所有后代。

关于ruby - 在 parent 的内部状态中闲逛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com