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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:20:35