Hello,
I’m fixing some Julia 0.6 code to Julia 0.7/1.0
short{T<:Real}(qty::T)::T = qty
I was trying
julia> short(qty::T)::T where {T<:Real} = qty
ERROR: UndefVarError: T not defined
Stacktrace:
[1] top-level scope at none:0
I fixed it using
short(qty::T) where {T<:Real} = qty
I wonder why I can’t define T as a parametric type of output like this.
Any idea?
mauro3
2
This works (as long as you don’t need T
in the function body):
julia> short(qty::T where T<:Real)::T = qty
short (generic function with 1 method)
Edit: scrap that:
julia> short(5)
ERROR: UndefVarError: T not defined
Stacktrace:
[1] short(::Int64) at ./REPL[1]:1
[2] top-level scope at none:0
because the return type declaration is “in the body”.
You need to be a bit more explicit in this case:
julia> (short(qty::T)::T) where {T<:Real} = qty
short (generic function with 1 method)
julia> short(3)
3
Your definition is ambigous and could be parsed as short(qty::T)::(T where {T<:Real}) = qty
, which would leave the first T
undefined.
3 Likes
Thanks @pfitzseb for your help