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

Julia自定义类型加减函数重写:如何规避无限循环?

Julia自定义类型加法避免无限循环的解决方法

你的问题出在加法函数的else分支:return in1 + in2会直接递归调用你自己定义的+(::MyType, ::MyType),导致无限循环。要解决这个问题,核心是在不满足条件时,直接实现实际的加法逻辑,而非递归调用自身。

修正后的代码示例

假设你的MyType定义如下(包含一个数值字段x):

struct MyType
    x::Int
end

修正加法与减法实现:

import Base: *, +, -

# 自定义加法逻辑
function +(in1::MyType, in2::MyType)
    if condition_met
        return 2 * in1
    else
        # 直接基于字段构造新实例,完成实际加法
        return MyType(in1.x + in2.x)
    end
end

# 自定义减法,依赖加法和乘法
-(in1::MyType, in2::MyType) = in1 + (-1 * in2)

# 补充实现整数与MyType的乘法,让-1*in2生效
Base.:*(n::Int, mt::MyType) = MyType(n * mt.x)

关键说明

  • 避免递归:else分支不再调用in1 + in2,而是直接操作MyType的内部字段,构造新的MyType实例返回。
  • 配套实现:确保*操作(整数与MyType的乘法)已经实现,这样减法里的-1*in2才能正常工作。

如果你的MyType有多个字段,只需要在else分支里对每个字段执行对应的加法操作,再构造新实例即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:44:56