Что означает `где {t: <Integer}` в контексте объявления функции в Julia? - PullRequest
4 голосов
/ 27 сентября 2019

Я видел следующее в коде других людей, но никогда не писал его самостоятельно, так как не понимал, что происходит.

Например:

function add(x::T, y::T) where {T :< Integer}

Я предполагаю, что T приводится как целое число, а затем используется для явного ввода x и y.Но почему бы просто не сделать x::Int64?where {T :< Integer} допускает любой тип Int, например Int32 и Int64?

Ответы [ 2 ]

4 голосов
/ 27 сентября 2019

Чтобы немного расширить ответ Оскара:

Использование function add(x::T, y::T) where {T :< Integer} позволяет добавить параметрический метод к функции add(x, y).Вы можете прочитать об этом более подробно в документации Julia в разделе Параметрические методы .

Это имеет два больших преимущества: позволяет определять достаточно общие методы(поскольку во многих случаях точный тип целого числа на самом деле не влияет на определение функции).Одновременно он позволяет ограничить вызов парами x, y одного типа, что может улучшить стабильность типов и привести к более эффективному скомпилированному коду.

3 голосов
/ 27 сентября 2019

function add(x::T, y::T) where {T :< Integer} означает, что функцию можно вызывать для любых двух переменных, тип которых совпадает с типом Integer.Это включает в себя такие вещи, как 2 bigInt с, но не 1 Int64 и 1 Int32.Это называется Diagonal Dispatch и является очень полезным шаблоном.

...