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

Gem::Version 抛出ArgumentError:传参数量正确仍报错?

问题解答

原因

Gem::Version没有遵循Ruby默认的实例化逻辑——它重写了类方法self.new,这个自定义的new方法强制要求调用时必须传入至少一个参数,并且在实例化流程的早期就完成了参数校验,根本没机会执行你子类里的initialize方法。

你以为重写initialize就能控制参数传入规则,但实际上父类的new方法才是实例化的入口,它先拦截了参数检查,直接导致了报错。

解决办法

有两种可行的处理方式:

方式一:跳过父类的new,手动完成实例化

直接用allocate创建空实例,再手动调用initialize方法:

v = EmptyVersion.allocate
v.initialize

方式二:重写子类的self.new方法

覆盖父类的new逻辑,让子类支持无参调用:

class EmptyVersion < Gem::Version
  def self.new
    obj = allocate
    obj.initialize
    obj
  end

  def initialize
    super('')
  end
end

v = EmptyVersion.new # 现在可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:20:00