You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中使用无参数super为何触发ArgumentError?

Ruby中super无参数调用引发ArgumentError的原因解释

你对Ruby里super的用法理解有偏差:不带参数的super会把当前方法接收的所有参数原封不动传给父类的同名方法,不是自动匹配父类的参数数量。

看你的代码:

  • 父类Point的initialize只接受x和y两个参数
  • 子类Point3D的initialize有x、y、z三个参数

当你在Point3D#initialize里调用super时,相当于执行了super(x, y, z),一次性把三个参数传给了父类的initialize,但父类方法只定义了两个参数,参数数量不匹配,所以抛出ArgumentError。

要修复这个问题,你需要显式传递父类方法需要的参数:

class Point3D < Point 
  def initialize (x, y, z)
    super(x, y) # 仅传递x和y给父类初始化方法
    @z = z
  end
end

额外补充下super的两种核心用法:

  • super:传递当前方法的所有参数(包括块,如果存在的话)给父类方法
  • super():不传递任何参数和块给父类方法(注意这里的空括号不能省略,省略就变成第一种情况了)

内容的提问来源于stack exchange,提问作者Tullu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:55:00