Hello everyone,
I have a function whose return type is defined and it’s Float64. However, when I check with Base.return_types(f), it says Any[Float64]. What does it mean and will it affect performance?
That’s good, it just means the only return type is Float64
. From the docstring:
Return a list of possible return types for a given function
f
and argument typestypes
.
The list corresponds to the results of type inference on all the possible method match
candidates forf
andtypes
(see also [methods(f, types)
](@ref methods).
So if you give abstract types to match more methods, you’d see a larger array of types inferred from the types you provided or the argument annotations, depending on which is more specific:
julia> f(x::Any) = x+1; f(x::Float64) = x-0.1
f (generic function with 2 methods)
julia> Base.return_types(f, (Int,)) # infers f(::Int) for f(x::Any)
1-element Vector{Any}:
Int64
julia> Base.return_types(f, (Number,)) # f(::Number) for f(x::Any), f(::Float64) for f(x::Float64)
2-element Vector{Any}:
Float64
Any
Just use @code_warntype
or packages like JET.jl and Cthulhu.jl for a particular call signature, it’s more informative.
Thank you so much, I got confused because of Any. But now I see it refers to type of elements in the list, and I have only Float64 in the list.
Thank you for a fast reply!