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]
。
问题是,这导致 5
被 cast 转换为 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
我想限制函数的参数 return 类型(某物的 Vector
)。
假设我有一个函数 f
定义如下:
julia> function f()::Vector{Real}
return [5]
end
f (generic function with 1 method)
我使用 Vector{Real}
因为我不想限制自己太多 - return 值有时可能会更改为 [5.0]
。
问题是,这导致 5
被 cast 转换为 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