管道運算子

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

expression |> function

使用管道運算子將表示式連結在一起並直觀地記錄一系列函式的流程。

考慮以下:

Oven.bake(Ingredients.Mix([:flour, :cocoa, :sugar, :milk, :eggs, :butter]), :temperature)

在示例中,Oven.bakeIngredients.mix 之前出現,但最後執行。此外,:temperatureOven.bake 的引數可能並不明顯

使用 Pipe Operator 重寫此示例:

[:flour, :cocoa, :sugar, :milk, :eggs, :butter]
|> Ingredients.mix
|> Oven.bake(:temperature)

給出相同的結果,但執行的順序更清晰。此外,很明顯:temperatureOven.bake 呼叫的引數。

請注意,使用 Pipe Operator 時,每個函式的第一個引數都會重新定位到 Pipe Operator 之前,因此被呼叫的函式似乎只有一個引數。例如:

Enum.each([1, 2, 3], &(&1+1)) # produces [2, 3, 4]

是相同的:

[1, 2, 3]
|> Enum.each(&(&1+1))