Как это:
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