我正在阅读github上的一些代码elixir代码,我看到经常使用|>
。它不会出现在文档站点的operation列表中。这是什么意思?
即
expires_at: std["expires_in"] |> expires_at,
答案 0 :(得分:23)
这是pipe operator。来自链接的文档:
此运算符在左侧引入表达式作为右侧函数调用的第一个参数。
实施例
IEX>
[1, [2], 3] |> List.flatten()
[1, 2, 3]
上面的示例与调用
List.flatten([1, [2], 3])
相同。
答案 1 :(得分:22)
它使您能够避免像这样的错误代码:
orders = Order.get_orders(current_user)
transactions = Transaction.make_transactions(orders)
payments = Payment.make_payments(transaction, true)
使用管道运算符的相同代码:
current_user
|> Order.get_orders
|> Transaction.make_transactions
|> Payment.make_payments(true)
看看Payment.make_payments函数,有第二个bool参数,如果那是第一个这样的参数:
def make_payments(bool_parameter, transactions) do
//function
end
它不再适用了。
开发elixir应用程序时请记住,重要的参数应该放在首位,将来它将使您能够使用管道运算符。
我在编写非elixir代码时讨厌这个问题:我该怎么命名这个变量?我在回答上浪费了很多时间。
答案 2 :(得分:3)
除了Stefan的出色回应之外,您还可以阅读名为" Pipeline Operator"这个blog posting是为了更好地理解管道运营商打算在Elixir中解决的用例。重要的是这个:
管道运营商可以组合各种操作 不使用中间变量。 。 。代码很容易 然后从上到下阅读。我们通过国家 各种转换,以获得所需的结果,每次转换 返回一些修改后的州版本。