我尝试在 Julia 中为创建的类型实现自定义加法(和减法)函数
import Base: *, +, -
function +(in1::MyType,in2::MyType)
if condition_met
return 2*in1
else
return in1 + in2
end
end
-(in1::MyType,in2::MyType) = in1 + -1*in2
对于满足条件的情况来说,这工作得很好,但是当条件不满足时,它当然会导致无限循环(因为它将再次调用该函数)。有没有一种(优雅的)方法来规避这个问题?
这是一个示例实现
struct MyType
val::Float64
end
function Base.:+(x::MyType, y::MyType)
if x.val > 100
return MyType(2 * x.val)
else
return MyType(x.val + y.val)
end
end
Base.:-(x::MyType) = MyType(-x.val)
Base.:-(x::MyType, y::MyType) = x + (-y)
使用方法:
julia> x = MyType(2.0)
MyType(2.0)
julia> y = MyType(3.0)
MyType(3.0)
julia> z = MyType(103.0)
MyType(103.0)
julia> x + y
MyType(5.0)
julia> x - y
MyType(-1.0)
julia> z + y
MyType(206.0)
julia> y + z
MyType(106.0)