ruby – 类和继承
发布时间:2020-12-17 02:55:33 所属栏目:百科 来源:网络整理
导读:我试图理解 Ruby中的继承系统.这是我的代码: class Man attr_accessor :name def initialize(name = "Foo") @name = name endendclass User Man attr_accessor :mail def initialize(mail = "bar") super @mail = mail endend 这是我的考验: man = Man.new
我试图理解
Ruby中的继承系统.这是我的代码:
class Man attr_accessor :name def initialize(name = "Foo") @name = name end end class User < Man attr_accessor :mail def initialize(mail = "bar") super @mail = mail end end 这是我的考验: man = Man.new man => #<Man:0x007fb68da4a768 @name="Foo"> user = User.new user => #<User:0x007fb68da442c8 @name="bar",@mail="bar"> 我不明白为什么用户的@name不是“Foo”! Normaly,它应该是因为它是man初始化方法中的默认参数,不是吗? 谢谢你的帮助 ! 解决方法
super(没有参数列表)使用传入的相同参数调用超类中的相同方法.如果要显式传递任何参数,则必须使用空参数列表:super().
请记住:super不是方法调用,它是关键字,关键字不必遵循常规方法调用评估规则.这是其中一个差异.对于方法调用,foo和foo()是等价的,它们都不传递任何参数.对于super,有一个区别:super()不传递任何参数,超级转发参数. 现在,这是一个额外的转折:实际上,你没有传递任何参数来初始化,所以它们如何被传递……或者你呢?好吧,事实证明,为了调用super,可选参数的默认参数被视为已经显式传递. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |