typesjulia

How to determine type of result from function in Julia without performing the computation


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?


Solution

  • 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})