Как передать дополнительный параметр через оператор |> в эликсире - PullRequest
0 голосов
/ 14 апреля 2019

У меня ниже код в эликсире:

function1(param1) |> calculator()

значение, возвращаемое из function1, будет передано в качестве параметра calculator. Я хочу добавить дополнительный параметр к calculator. Как я могу совместить его с тем, который вернулся с function1?

1 Ответ

0 голосов
/ 14 апреля 2019

Как это:

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
...