elixir 中的“|>”是什么意思?

问题描述 投票:0回答:3

我正在阅读 github 上的一些 Elixir 代码,我发现

|>
经常被使用。它没有出现在文档站点的操作列表中。这是什么意思?

expires_at:    std["expires_in"] |> expires_at,
elixir
3个回答
43
投票

这是管道运算符。来自链接的文档:

该运算符将左侧的表达式作为右侧函数调用的第一个参数引入。

示例

iex>

[1, [2], 3] |> List.flatten()

[1, 2, 3]

上面的例子与调用

List.flatten([1, [2], 3])
相同。


40
投票

它使您能够避免像这样的错误代码:

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 代码时我讨厌这个问题:我应该给这个变量命名什么?我在回答上浪费了很多时间。


3
投票

除了 Stefan 的出色回应之外,您可能还需要阅读这篇博客文章中名为“管道运算符”的部分,以便更好地理解管道运算符在 Elixir 中要解决的用例。重要的想法是:

管道运算符使得组合各种操作成为可能 不使用中间变量。 。 .代码可以很容易地 然后从上到下阅读。我们通过状态 各种变换才能得到想要的结果,每次变换 返回状态的一些修改版本。

© www.soinside.com 2019 - 2024. All rights reserved.