管道运算符
管道运算符|>
在左侧获取表达式的结果,并将其作为第一个参数提供给右侧的函数。
expression |> function
使用管道运算符将表达式链接在一起并直观地记录一系列函数的流程。
考虑以下:
Oven.bake(Ingredients.Mix([:flour, :cocoa, :sugar, :milk, :eggs, :butter]), :temperature)
在示例中,Oven.bake
在 Ingredients.mix
之前出现,但最后执行。此外,:temperature
是 Oven.bake
的参数可能并不明显
使用 Pipe Operator 重写此示例:
[:flour, :cocoa, :sugar, :milk, :eggs, :butter]
|> Ingredients.mix
|> Oven.bake(:temperature)
给出相同的结果,但执行的顺序更清晰。此外,很明显:temperature
是 Oven.bake
调用的参数。
请注意,使用 Pipe Operator 时,每个函数的第一个参数都会重新定位到 Pipe Operator 之前,因此被调用的函数似乎只有一个参数。例如:
Enum.each([1, 2, 3], &(&1+1)) # produces [2, 3, 4]
是相同的:
[1, 2, 3]
|> Enum.each(&(&1+1))