Elixir語言中 Kernel.left |> right
相關用法介紹如下。
用法:
left |> right
(宏)
管道操作符。
該運算符將左側的表達式作為右側函數調用的第一個參數引入。
例子
iex> [1, [2], 3] |> List.flatten()
[1, 2, 3]
上麵的示例與調用 List.flatten([1, [2], 3])
相同。
當需要執行一係列類似於管道的操作時,|>
運算符最有用:
iex> [1, [2], 3] |> List.flatten() |> Enum.map(fn x -> x * 2 end)
[2, 4, 6]
在上麵的示例中,列表 [1, [2], 3]
作為第一個參數傳遞給
函數,然後扁平列表作為第一個參數傳遞給 List.flatten/1
函數,該函數將列表的每個元素加倍。Enum.map/2
換句話說,上麵的表達式簡單地轉換為:
Enum.map(List.flatten([1, [2], 3]), fn x -> x * 2 end)
陷阱
使用管道運算符時有兩個常見的陷阱。
第一個與運算符優先級有關。例如,下麵的表達式:
String.graphemes "Hello" |> Enum.reverse
轉換為:
String.graphemes("Hello" |> Enum.reverse())
這會導致錯誤,因為沒有為二進製文件定義
協議。添加顯式括號可以解決歧義:Enumerable
String.graphemes("Hello") |> Enum.reverse()
或者,甚至更好:
"Hello" |> String.graphemes() |> Enum.reverse()
第二個限製是 Elixir 總是通過管道傳遞給函數調用。因此,要通過管道連接到匿名函數,您需要調用它:
some_fun = &Regex.replace(~r/l/, &1, "L")
"Hello" |> some_fun.()
或者,您可以使用
獲得相同的效果:then/2
some_fun = &Regex.replace(~r/l/, &1, "L")
"Hello" |> then(some_fun)
最常用於當您想要通過管道傳遞到函數但預期值在第一個參數之外的情況下,例如上麵。通過用它的值替換then/2
some_fun
,我們得到:
"Hello" |> then(&Regex.replace(~r/l/,&1, "L"))
相關用法
- Elixir Kernel.left || right用法及代碼示例
- Elixir Kernel.left / right用法及代碼示例
- Elixir Kernel.left - right用法及代碼示例
- Elixir Kernel.left !== right用法及代碼示例
- Elixir Kernel.left > right用法及代碼示例
- Elixir Kernel.left and right用法及代碼示例
- Elixir Kernel.left -- right用法及代碼示例
- Elixir Kernel.left != right用法及代碼示例
- Elixir Kernel.left ++ right用法及代碼示例
- Elixir Kernel.left + right用法及代碼示例
- Elixir Kernel.left == right用法及代碼示例
- Elixir Kernel.left =~ right用法及代碼示例
- Elixir Kernel.left <= right用法及代碼示例
- Elixir Kernel.left in right用法及代碼示例
- Elixir Kernel.left === right用法及代碼示例
- Elixir Kernel.left && right用法及代碼示例
- Elixir Kernel.left < right用法及代碼示例
- Elixir Kernel.left <> right用法及代碼示例
- Elixir Kernel.left >= right用法及代碼示例
- Elixir Kernel.left or right用法及代碼示例
- Elixir Kernel.left * right用法及代碼示例
- Elixir Kernel.length用法及代碼示例
- Elixir Kernel.SpecialForms.case用法及代碼示例
- Elixir Kernel.round用法及代碼示例
- Elixir Kernel.put_in用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.left |> right。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。