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

自定义内部构造方法报错:无匹配Pris(::Float64,::Float64,::Float64)方法

问题分析与解决

报错原因

在Julia中,当你为结构体定义自定义构造函数时,系统自动生成的「内联构造函数」(即能直接匹配结构体字段类型的默认构造)会被覆盖。你的代码仅定义了两个构造:

  • 无参构造Pris()
  • 接受三个Integer类型参数的构造Pris(l::Integer,w::Integer,h::Integer)

而2.4、1.4这类浮点数属于Float64类型(是Real的子类型,但不是Integer),调用Pris(2.4,1.4,4.6)时,没有匹配的构造方法,因此触发MethodError。

Julia不会自动“忽略参数类型不匹配直接创建实例”,它严格遵循方法匹配规则,只有存在对应参数类型的构造函数时才会执行。

解决方案

只需修改构造函数的参数类型为Real,让它能适配所有Real的子类型(包括Integer、Float64等),同时保留你的验证逻辑:

struct Pris
    length::Real
    width::Real
    height::Real

    function Pris()
        new(1,0,1)
    end

    # 将参数类型从Integer改为Real
    function Pris(l::Real,w::Real,h::Real)
        if l<0 || w<0 || h<0
            error("Cannot have negative values")
        elseif w<l
            error("Cannot have shorter width than length")
        else
            new(l,w,h)
        end
    end
end

测试验证

  • 传入浮点数时,会执行验证逻辑:
    z = Pris(2.4,1.4,4.6)  # 触发错误:w=1.4 < l=2.4,提示"Cannot have shorter width than length"
    
  • 符合条件的浮点数可以正常创建实例:
    z = Pris(2.4,3.4,4.6)  # 成功生成Pris实例
    
  • 整数参数依然可以正常使用:
    z = Pris(2,3,4)  # 成功生成Pris实例
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:32:46