Julia 限制参数 return 类型

Julia restrict parametric return type

我想限制函数的参数 return 类型(某物的 Vector)。

假设我有一个函数 f 定义如下:

julia> function f()::Vector{Real}
           return [5]
       end
f (generic function with 1 method)

我使用 Vector{Real} 因为我不想限制自己太多 - return 值有时可能会更改为 [5.0]

问题是,这导致 5cast 转换为 Real - Julia 基本上忘记了具体类型:

julia> f()
1-element Vector{Real}:
 5

julia> typeof(f())
Vector{Real} (alias for Array{Real, 1})

请注意,如果没有参数类型,情况并非如此:

julia> function g()::Real
           return 5
       end
g (generic function with 1 method)

julia> g()
5

julia> typeof(g())
Int64

我本来希望可能会出现类似以下的情况:

julia> function f()::Vector{T} where T<:Real
           return [5]
       end
f (generic function with 1 method)

julia> f()
ERROR: UndefVarError: T not defined
Stacktrace:
 [1] f()
   @ Main ./REPL[7]:2
 [2] top-level scope
   @ REPL[8]:1

但是,这仅适用于参数上使用的参数类型:

julia> function f(t::T)::Vector{T} where T<:Real
           return [5]
       end
f (generic function with 2 methods)

julia> f(5)
1-element Vector{Int64}:
 5

这显然不是我想要的。有没有办法在 Julia 中实现这一点?

尝试:

function f()::Vector{<:Real}
    return [5]
end

现在:

julia> f()
1-element Vector{Int64}:
 5