我在长生不老药中有以下代码:
function1(param1) |> calculator()
从function1
返回的值将作为参数传递到calculator
。我想要的是向calculator
添加一个附加参数。如何将其与function1
返回的内容结合起来?
答案 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