具有默认参数的函数的Elixir类型规范

时间:2016-05-23 17:14:35

标签: elixir

如何为接受一个具有默认值的参数的函数编写类型规范?如下所示:

def foo(bar \\ 10) do
  bar
end

会是这样的:

@spec foo(integer) :: integer

或者会是什么?

谢谢。

2 个答案:

答案 0 :(得分:9)

我想补充一点,如果你的问题是如果一个函数的typespec与一个参数有一个默认值和一个没有参数的参数之间存在差异,那么没有差别。

答案 1 :(得分:0)

它按预期工作,因为您实际上定义了两个函数。

@spec foo(integer) :: integer
def foo(bar \\ 10) do
  bar
end

等效于:

def foo() do
  foo(10)
end

@spec foo(integer) :: integer
def foo(bar) do
  bar
end

因此,您基本上可以得到两个函数,但是其中只有一个具有@spec