“|>”在灵药中的含义是什么?

问题描述:

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

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

在IEx中,您可以使用'h |>/2'来查看它的文档。它适用于任何二元运算符'h ++/2','h +/2',一元运算符'h -/1'或常规函数'h is_atom'。 – 2015-02-23 09:21:09

这是pipe operator。来自链接的文档:

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

实例

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

[1, 2, 3]

上面的例子是与调用List.flatten([1, [2], 3])

除了Stefan的极好的响应,你可能需要阅读本blog posting的所谓的“管道运营商”为了更好地理解该管道运营商意在药剂来解决用例的部分。重要思想是:

流水线操作员可以在不使用中间变量的情况下组合各种操作 。 。 。代码可以很容易地从 ,然后从上到下阅读。我们通过 各种转换状态来获得所需的结果,每个转换 返回一些状态的修改版本。

它可以让你避免糟糕的代码这样的能力:

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功能,还有第二个布尔参数,如果这是这样的第一个参数:

def make_payments(bool_parameter, transactions) do 
    //function 
end 

它不会工作了。

在开发elixir应用程序时要记住重要的参数应该放在第一位,将来它会给你使用管道操作的能力。

编写非灵丹妙药时,我讨厌这个问题:我应该命名这个变量?我浪费大量时间回答。