如何通过Elixir中的|>运算符传递其他参数

时间:2019-04-13 23:56:01

标签: elixir

我在长生不老药中有以下代码:

function1(param1) |> calculator()

function1返回的值将作为参数传递到calculator。我想要的是向calculator添加一个附加参数。如何将其与function1返回的内容结合起来?

1 个答案:

答案 0 :(得分:0)

像这样:

function1(param1) |> calculator(param2)

管道运算符将运算符的左侧作为第一个参数传递给右侧函数。括号内照常提供了该函数右侧的其他参数。

使用管道重写:

  • calculator(function1(param1))function1(param1) |> calculator()
  • calculator(function1(param1), param2)function1(param1) |> calculator(param2)

这是一个演示模块:

defmodule Demo do
  def make10(), do: 10
  def add(a, b), do: a + b
end

还有一个示例iex会话:

iex(1)> Demo.add(1, 2)
3
iex(2)> Demo.make10()
10
iex(3)> Demo.add(Demo.make10(), 5)
15
iex(4)> Demo.make10() |> Demo.add(5)
15

如果您希望function1能够将多个参数传递给calculator,则不可能,因为|>仅传递一个参数。但是您可以通过将所有参数包装在一个元组中并将它们作为一个参数传递来轻松解决。您可以在calculator的定义中使用模式匹配,以从元组中提取值:

defmodule Demo2 do
  def make_tuple(), do: {5, 10}
  def add({a, b}), do: a + b
end

用法:

iex(1)> Demo2.make_tuple()
{5, 10}
iex(2)> Demo2.add({1, 2})
3
iex(3)> Demo2.make_tuple() |> Demo2.add()
15