In Julia, is there a way to get the type of a function’s return value given its arguments (or only the types of its arguments), without running the function? For instance, I would like to do this:
function foo(a, b)
RetType = typeof(f(a, b))
# do something
end
The problem here is that I actually called f
on a
and b
to get the return type. Is there a way to avoid the function call? Something along the lines of promote_type
or related functions?
You can define the following function:
gettype(f, a, b) = last(@code_typed f(a, b))
Now you can do:
julia> gettype(+, 1, 2)
Int64
julia> gettype(+, 1, 2.)
Float64
julia> gettype(append!, Int[], 3)
Vector{Int64} (alias for Array{Int64, 1})
The compiler does this internally, see docs.julialang.org/en/v1/devdocs/inference for more info.