一段Ruby代码令人困惑 - 超级

J S*_*olt 0 ruby

我正在阅读Zed Shaw的Ruby入门书.我遇到了一段我不太了解的代码.

class Person

def initialize(name)
    @name = name
    @pet = nil
end 

attr_accessor :pet
end 

class Employee < Person

def initialize(name, salary)
    super(name)
    @salary = salary
end 

attr_accessor :salary, :name
end 
Run Code Online (Sandbox Code Playgroud)

我非常粗略地理解超级(名称)部分.我相信这意味着它会延伸到父类?我不确定我理解为什么在现实世界中会这样做.为什么有人会超级(姓名)而不是只写@name = name?

我还在学习.提前致谢!

Ser*_*sev 5

为什么有人会做超级(名字)而不仅仅是写作@name = name

让我们从另一个角度看.为什么有人会复制已经存在于父类中的[可能复杂]功能,而不是简单地将工作委托给父级?

如果复制功能然后需求更改,则需要更改所有副本.这容易出错并且在时间/努力方面不必要地昂贵.