Ответ 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.