ruby 将参数列表传递给超类时出错

nzkunb0c  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(179)

抱歉,如果我对Ruby不太了解,这个问题可能不清楚。我有一个父类(我没有实现)Reports,它有一个方法query,定义如下:

class Reports

      def self.query(id:, is_active: false, is_timestamp: false, version: DEFAULT_VERSION, limit: DEFAULT_LIMIT)

         <<code>>
end

我定义了一个继承Reports的子类Report,并定义了相同的方法query,如下所示:

class Report < Reports

    def self.q_version(id)
           <<some logic to decide version>>
    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

现在,当我运行代码时,我得到了一个参数错误,如下所示:

ArgumentError: wrong number of arguments (given 5, expected 0; required keyword: id)

我怀疑我没有正确地做超级电话,但不知道是哪一部分。
所以任何帮助都将不胜感激。

kuhbmx9i

kuhbmx9i1#

该方法的签名表明它需要如下所示的关键字参数:

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

或者在Ruby 3.1以上版本中使用new shorthand hash syntax

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

相关问题