在长生不老药中,"|>"是什么意思?

Ant*_*yrd 21 elixir

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

expires_at:    std["expires_in"] |> expires_at,
Run Code Online (Sandbox Code Playgroud)

Ste*_*nke 26

这是管道操作员.来自链接的文档:

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

例子

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

[1, 2, 3]

上面的示例与调用相同List.flatten([1, [2], 3]).


小智 26

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

orders = Order.get_orders(current_user)
transactions = Transaction.make_transactions(orders)
payments = Payment.make_payments(transaction, true)
Run Code Online (Sandbox Code Playgroud)

使用管道运算符的相同代码

current_user
|> Order.get_orders
|> Transaction.make_transactions
|> Payment.make_payments(true)
Run Code Online (Sandbox Code Playgroud)

看看Payment.make_payments函数,有第二个bool参数,如果那是第一个参数,就像这样:

def make_payments(bool_parameter, transactions) do
   //function 
end
Run Code Online (Sandbox Code Playgroud)

它不再有用了.

在开发elixir应用程序时请记住,重要的参数应该放在首位,将来它将使您能够使用管道操作员.

在编写非elixir代码时,我讨厌这个问题:我该怎么命名这个变量?我浪费了很多时间来回答.

  • 不清楚为什么你说第一行代码是“坏代码” - 请详细说明。对于新的 Elixir 编码器来说,它们看起来就像普通代码。 (2认同)