考虑以下简单功能:
def myfun(first \\ :a, middle \\ :b, last \\ :c) do
{first, middle, last}
end
我想为第一个参数和最后一个参数传递该函数的特定值,并让其推断中间参数。我预计这样的事情可能会起作用:
{:foo, :b, :baz} = myfun(:foo, _, :baz)
但事实并非如此。
完成我想做的事情的正确方法是什么?
答案 0 :(得分:5)
正如Aleksei Matiushkin在评论中提到的那样,当所有参数都是可选的时,使用Keyword
可能是更好的选择。看起来像这样:
defmodule Fun do
def myfun(options \\ []) do
first = Keyword.get(options, :first, :a)
second = Keyword.get(options, :second, :b)
third = Keyword.get(options, :third, :c)
{first, second, third}
end
end
Fun.myfun(first: 1, third: 3) # => {1, :b, 3}
Fun.myfun(second: 2) # => {:a, 2, :c}
Fun.myfun() # => {:a, :b, :c}