Ruby子类调用父类query方法时参数传递错误求助
Ruby子类调用父类关键字参数方法报错的解决办法
你的问题出在父类query方法使用的是关键字参数,但子类调用super时用了位置参数传递,Ruby无法识别这些位置参数对应父类的关键字参数,所以抛出ArgumentError。
父类的query方法定义明确要求所有参数都是关键字形式(比如id:、is_active:),而你在子类里写的super(id, is_active, is_timestamp, version, limit)是按位置顺序传参,这和父类的参数定义不匹配。
正确的调用方式
需要把参数以关键字参数的形式传递给super,有两种写法:
写法1:完整关键字传递
class Report < Reports def self.q_version(id) # 你的版本判断逻辑 end def self.query(id:, is_active: false, is_timestamp: false, limit: DEFAULT_LIMIT) version = q_version(id) super(id: id, is_active: is_active, is_timestamp: is_timestamp, version: version, limit: limit) end end
写法2:Ruby 2.7+简写(变量名与参数名一致时可用)
如果你的Ruby版本在2.7及以上,可以用更简洁的写法:
class Report < Reports def self.q_version(id) # 你的版本判断逻辑 end def self.query(id:, is_active: false, is_timestamp: false, limit: DEFAULT_LIMIT) version = q_version(id) super(id:, is_active:, is_timestamp:, version:, limit:) end end
这样super就能正确匹配父类的关键字参数定义,不会再报参数数量不匹配的错误。
内容的提问来源于stack exchange,提问作者user1100766
相关产品推荐
相关产品推荐

