在函数f(a :: T,x :: T)中混合实数和复数{Real},其中T <:Union {Real,Complex {Real}}

时间:2019-09-13 11:37:09

标签: types julia complex-numbers

我有这样的功能:

function f(
        a::T,
        x::T
    )::T where {R<:Real, T<:Union{R,Complex{R}}}
    return g(R(2), a, 1, x)
end

我想允许用户通过标识f(a,x) {{来输入a Realx Complex{Real}的{​​{1}} 1}}到带有Real的复数。

使用此实现是不可能的。如果用户使用a,则会返回错误(无方法)。因此,用户必须执行im = 0

我该怎么做才能使f(2.0, 1.0+1.0im)成为可能?


编辑

我还没有尝试过,但是也许我可以做

f(2.0+0im, 1.0+1.0im)

但是我该怎么代替f(2.0, 1.0+1.0im)

1 个答案:

答案 0 :(得分:1)

原始答案:

我相信您正在寻找的是以下

function f(a::T, x::R) where {T<:Real,R<:Complex{T}}
    g(R(2), a, one(T), x)
end

编辑:

如果您想同时接受RealComplex,最直接的方法就是简单地依靠Number的子类型为{{1} }和Real

Complex