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
相关产品推荐
相关产品推荐

