Ruby 在家长';内部状态
tl:dr解耦是如何工作的?可能需要一些小例子 我正在阅读编程Ruby——实用程序员指南。 (http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html) 这里有一个关于如何为子类KaraokeSong of Song实现to_s的示例Ruby 在家长';内部状态,ruby,decoupling,Ruby,Decoupling,tl:dr解耦是如何工作的?可能需要一些小例子 我正在阅读编程Ruby——实用程序员指南。 (http://ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html) 这里有一个关于如何为子类KaraokeSong of Song实现to_s的示例 class KaraokeSong < Song # ... def to_s "KS: #{@name}--#{@artist} (#{@duration}) [#{@lyrics}]"
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...]"
现在,当@duration变量仍然以毫秒为单位存储歌曲的持续时间时,新的to_s调用父方法如何解决问题?它仍然返回3750分钟,不是吗
我想我真的不明白这两首歌之间的区别。我们假设
歌曲
能够正确地输出其@持续时间
如果我们决定更改Song
以毫秒为单位存储持续时间,我们将只更改Song#to_s
方法,而不必将其所有子代的更改为_s
def to_s
super + " [#{@lyrics}]"
end