我正在阅读 github 上的一些 Elixir 代码,我发现
|>
经常被使用。它没有出现在文档站点的操作列表中。这是什么意思?
即
expires_at: std["expires_in"] |> expires_at,
这是管道运算符。来自链接的文档:
该运算符将左侧的表达式作为右侧函数调用的第一个参数引入。
示例
iex>
[1, [2], 3] |> List.flatten()
[1, 2, 3]
上面的例子与调用
相同。List.flatten([1, [2], 3])
它使您能够避免像这样的错误代码:
orders = Order.get_orders(current_user)
transactions = Transaction.make_transactions(orders)
payments = Payment.make_payments(transactions, true)
使用管道运算符的相同代码:
current_user
|> Order.get_orders
|> Transaction.make_transactions
|> Payment.make_payments(true)
看
Payment.make_payments
函数,有第二个参数bool_parameter
。第一个参数引用调用管道的变量:
def make_payments(transactions, bool_parameter) do
//function
end
在开发 Elixir 应用程序时,请记住重要的参数应该放在第一位,将来它将让您能够使用管道运算符。
在编写非 Elixir 代码时我讨厌这个问题:我应该给这个变量命名什么?我在回答上浪费了很多时间。
除了 Stefan 的出色回应之外,您可能还需要阅读这篇博客文章中名为“管道运算符”的部分,以便更好地理解管道运算符在 Elixir 中要解决的用例。重要的想法是:
管道运算符使得组合各种操作成为可能 不使用中间变量。 。 .代码可以很容易地 然后从上到下阅读。我们通过状态 各种变换才能得到想要的结果,每次变换 返回状态的一些修改版本。