Is there a function `hasspecialization`?

Is there a strict version of hasmethod which only gives true if there is a specialized method with precisely the types I provide in the Tuple?

julia> f(x::Any) = "any"
f (generic function with 1 method)

julia> f(x::Int) = "int"
f (generic function with 2 methods)

julia> hasmethod(f, (Float64,))
true

julia> hasspecialization(f, (Float64,)) # does a function like this exist?
false
1 Like
julia> f(x::Any) = "any"
f (generic function with 2 methods)

julia> f(x::Int) = "int"
f (generic function with 2 methods)

julia> function hasspecialization(f, args)
           m = which(f, Tuple{Float64})
           return m.sig == Tuple{typeof(f), args...}
       end
hasspecialization (generic function with 1 method)

julia> hasspecialization(f, (Float64,))
false

julia> f(x::Float64) = "float64"
f (generic function with 3 methods)

julia> hasspecialization(f, (Float64,))
true

maybe… Not very tested.

4 Likes

Good enough for my use case. Thanks.