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
相关产品推荐
相关产品推荐

