加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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,可选参数的默认参数被视为已经显式传递.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读