什么是“|>”在长生不老药?

时间:2015-02-23 04:15:39

标签: elixir

我正在阅读github上的一些代码elixir代码,我看到经常使用|>。它不会出现在文档站点的operation列表中。这是什么意思?

expires_at:    std["expires_in"] |> expires_at,

3 个答案:

答案 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中解决的用例。重要的是这个:

  

管道运营商可以组合各种操作   不使用中间变量。 。 。代码很容易   然后从上到下阅读。我们通过国家   各种转换,以获得所需的结果,每次转换   返回一些修改后的州版本。