管道運算子
管道運算子|>
在左側獲取表示式的結果,並將其作為第一個引數提供給右側的函式。
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))