Оператор «не подтип» действительно существует (это >:
), но вам не нужен этот оператор для решения вашей проблемы.
Если вы просто хотите использовать универсальный метод для всех типов,и специфично для подтипов Real, тогда вы должны сделать:
f(x::Any) = 1
f(x::Real) = 2
Первый метод идентичен простому добавлению сигнатуры любого типа (например, f(x) = 1
), и эта функция будет работать как запасной вариант для всехтипы аргументов. Тем не менее, поскольку Real
является более точным, чем Any
, второй метод будет использоваться вместо первого, если входное значение будет Real
:
julia> f("Hello, world!"), f(0x01), f(1 + 2im), f(true)
(1, 2, 1, 2)
Обратите внимание, что вы получаете максимальную производительность независимо от -Независимо от того, какую сигнатуру типа вы указали в определении метода, когда метод на самом деле работает, он будет скомпилирован в конкретную версию в зависимости от конкретных типов ввода.