【发布时间】:2016-12-13 16:54:36
【问题描述】:
我是 Elixir 的新手。我有这个代码:
defmodule DefaultParams do
def func(p1, p2 \\ 2, p3 \\ 3, p4) do
IO.inspect [p1, p2, p3, p4]
end
end
使用这段代码,我可以:
DefaultParams.func("a", "b") #=> ("a", 2, 3, "b")
我理解它为什么会这样工作:因为模式匹配。 Elixir 尝试将提供的参数与函数定义中定义的参数进行匹配。
但是,我不明白这一点:
DefaultParams.func("a", "b", "c") #=> ("a", "b", 3, "c")
为什么输出不是("a", 2, "b", "c")?这也符合参数中定义的模式。我在文档中寻找了深入的解释,但找不到任何东西。
想了一会儿,我怀疑它是这样工作的:
- “a”与 p1 匹配
- “b”与 p2 匹配
- “c”与 p3 不匹配,因为那样会出现不匹配。所以就跳过了,p3得到默认值,也就是3
- “c”与 p4 匹配
有人可以确认/解释吗?
编辑:修正错别字
【问题讨论】:
标签: elixir