2017-07-13 40 views
1

我有2个默认参数功能的元数的仙丹使透析器的默认参数因此抱怨

defp foo(bar, baz, qux \\ "", garply \\ nil)

我有两个用途的函数,一个只提供前两个参数,其他全部4.透析器正在抱怨Function foo/3 will never be called。我认为这是因为它是私人的,两个默认值允许unroll_nodes/2,unroll_nodes/3unroll_nodes/4。我可以表面上放弃默认设置,并将它们提供给当前的foo/2调用,但仅仅为了安抚透析器似乎很愚蠢。有没有在spec中指定这个的方法?

回答

1

您可以使用@dialyzer属性抑制透析器警告:

@dialyzer {:no_unused, [foo: 3]} 

所有可能的选项列出here

+0

这是否意味着没有更好的方式来指定typespec?这确实是一个错误的警告?或者这是一种代码? – kolosy

+1

我想这是Elixir总是生成所有中间头的组合。另一种方法是使用单独的函数调用“手动”定义默认值。那么你只有没有/ 3版本的/ 2和/ 4版本。 – michalmuskala