Elixir-如何使用不在最后位置的默认函数参数?

时间:2019-05-23 14:10:52

标签: elixir

考虑以下简单功能:

def myfun(first \\ :a, middle \\ :b, last \\ :c) do
  {first, middle, last}
end

我想为第一个参数和最后一个参数传递该函数的特定值,并让其推断中间参数。我预计这样的事情可能会起作用:

{:foo, :b, :baz} = myfun(:foo, _, :baz)

但事实并非如此。

完成我想做的事情的正确方法是什么?

1 个答案:

答案 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}