在 Julia 中用自定义函数覆盖 + 函数

问题描述 投票:0回答:1

我尝试在 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

对于满足条件的情况来说,这工作得很好,但是当条件不满足时,它当然会导致无限循环(因为它将再次调用该函数)。有没有一种(优雅的)方法来规避这个问题?

julia
1个回答
0
投票

这是一个示例实现

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)
© www.soinside.com 2019 - 2024. All rights reserved.