Topazdocs
Политика языка

Конвейеры и заполнители

Каноническая грамматика, семантика, ограничения и отложенные границы: Конвейеры и заполнители.

Конвейер вычисляет левую часть один раз и затем применяет одно однозначное правило placeholder, insertion, callable или property; форматирование не меняет поток значения.

Политика

В left |> right значение left сохраняется до всех подвыражений справа. Если _ стоит в позиции call argument, каждый допустимый placeholder получает сохранённое значение и implicit insertion отключается. Без placeholders вызов получает его первым positional argument, callable value вызывается с одним аргументом, а .field читает поле. Pipeline левоассоциативен.

Определённое поведение

Placeholder связывается с ближайшим содержащим call, после чего действует обычный порядок вызова. Несколько placeholders получают одно и то же сохранённое левое значение. Named arguments остаются после positional/spread, а generic call checking выполняется после binding placeholder/insertion. Wildcard _ в pattern остаётся discard и не связан с pipeline.

Ограничения и явный отказ

Отклоняются bare _, _ как callee/member/field label, RHS-выражение без callable, named-before-positional и optional-property sugar |> ?.field. Pipeline не вычисляет левую часть для каждого placeholder и не вставляет дополнительный аргумент при наличии placeholder.

Отложенная граница

Пользовательские pipe operators, implicit async lifting, автоматическое error propagation, partial application, optional pipe-field sugar и широкая композиция не входят в профиль. >> определён в SPEC, но public docs используют |> или именованные функции.

Пример

TOPAZ
function double(value: int) -> int { value * 2 }

let values = [1, 2, 3]
let doubled = values |> map(_, double)
print("{doubled}")

Связанные правила