“|>”在灵药中的含义是什么?
问题描述:
我正在阅读github上的一些代码elixir代码,我经常使用|>
。它不出现在文档站点上的operation列表中。这是什么意思?“|>”在灵药中的含义是什么?
即
expires_at: std["expires_in"] |> expires_at,
答
这是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应用程序时要记住重要的参数应该放在第一位,将来它会给你使用管道操作的能力。
编写非灵丹妙药时,我讨厌这个问题:我应该命名这个变量?我浪费大量时间回答。
在IEx中,您可以使用'h |>/2'来查看它的文档。它适用于任何二元运算符'h ++/2','h +/2',一元运算符'h -/1'或常规函数'h is_atom'。 – 2015-02-23 09:21:09