Pipe |>
语法
|> 表示把左侧表达式流入右侧调用或可调用体。
语义
它是表面语法糖,不应引入新的求值模型。
|> 支持 _ 作为右侧占位孔位。
也就是说:
- 若右侧不出现
_,则lhs |> rhs按“把lhs作为右侧默认输入” desugar - 若右侧出现一个或多个
_,则每个_都替换为同一个lhs
例如:
value |> f(_, y)
可理解为:
f(value, y)
多个占位孔位会重复使用同一个 pipe 输入:
value |> f(prefix, _, _)
可理解为:
f(prefix, value, value)
当前方向下,pipe 中的 _ 只作为占位孔位使用,不是 wildcard pattern。
pipe placeholder _ 也不是普通 identifier:它只在 pipe 右侧表达式中作为当前 pipe 左值的插入点存在,不能被解析为可查找的变量名。
level-1 同时支持“默认插入第一个参数”和“显式 _ 孔位”两种风格。
level-1 当前方向把 |> 置于倒数第三弱优先级。
也就是说:
|>弱于普通算术、比较、逻辑、call、field access、index 等表达式构造|>强于:=|>也强于最外层的=绑定/定义语法
= 不作为普通 operator 进入表达式优先级表。
|> 是显式续接运算符。
因此,若一行以 |> 结束,则下一行继续视为同一表达式的一部分,而不是新的 statement。
例如:
value |>
step1() |>
step2()
应解析为单个 pipe expression。
边界
_ 在同一个 pipe 右侧表达式中可以出现多次。每次出现都替换为当前 pipe 的左侧值;它不创建临时变量、不重新求值左侧表达式,也不改变求值顺序。
普通 expression 位置的 _ 不表示变量引用。若需要丢弃值,应使用 pattern 位置的 _;若需要 pipe 占位,只能出现在 |> 的右侧。