Подтвердить что ты не робот

`where` в определениях функций в julia-0.6

Я пытаюсь понять новую систему типов в Julia v0.6 на основе чтения примечаний к выпуску.

Может ли кто-нибудь сказать мне, что

inv(M::Matrix{T}) where T <: AbstractFloat

дает мне то, что отличается от классического

inv{T<:AbstractFloat}(M::Matrix{T})

?

4b9b3361

Ответ 1

Новый синтаксис означает одно и то же, но может использоваться в большем количестве обстоятельств и может выражать больше конструкций и устраняет ряд концептуальных двусмысленностей, особенно окружающих параметрических конструкторов. Старый синтаксис будет устаревшим в 0,6, и некоторые старые синтаксисы будут исправлены с разным значением в 1.0. По сути, проблема с F{T}(args...) заключается в том, что часть F{T} концептуально неоднозначна - парсер знает, что это значит, но часто сбивает с толку людей:

  • В изоляции F{T} означает параметрический тип F с параметром типа T.

  • В соответствии с параметрами parens, а не как часть определения метода, F{T}(args...) означает применить тип F{T} к аргументам args... как функцию, обычно создавая экземпляр типа F{T}.

  • В соответствии с параметрами parens и equals, то есть как часть определения метода, как в F{T}(args...) = expr, это означает определение метода для F как функции с параметрами типа T формальными аргументами args... и определение expr.

В частности, для любого из них нет синтаксиса:

  • Добавление метода к F{T} для конкретного значения T в текущей области.

  • Добавление метода к F{T} для каждого параметрического значения T.

Эта ситуация вызывает синтаксис конструктора в Julia 0.5 и перед тем, как быть более запутанным и неинтуитивным, чем необходимо. В параметрах и конструкторах Julia 1.0 параметры и конструкторы будут более интуитивными и последовательными, следуя этим принципам:

  • Синтаксис, используемый для определения метода, всегда соответствует синтаксису, используемому для его вызова.
  • Синтаксис F{T} всегда относится к типу F с параметром T.
  • Параметры типа всегда вводятся в предложениях where.

Будет более подробное объяснение изменений, когда выйдет 0,6, возможно, в сообщении в блоге об основных моментах выпуска 0.6.