Elixir 由于长生不老药制造透析器中的默认参数而导致的功能性

Elixir 由于长生不老药制造透析器中的默认参数而导致的功能性,elixir,dialyzer,Elixir,Dialyzer,我有一个带有两个默认参数的函数 defpfoo(bar,baz,qux\\”,garply\\nil) 我有两个用法,一个只提供前两个参数,另一个全部4个参数。透析器抱怨永远不会调用函数foo/3。我假设这是因为它是私有的,两个默认值允许展开节点/2,展开节点/3,和展开节点/4。表面上,我可以放弃默认值,并在当前的foo/2调用中提供它们,但仅仅安抚透析器似乎很愚蠢。有没有办法在规范中指定这一点?您可以使用@dialyzer属性抑制透析器警告: @dialyzer {:no_unused, [

我有一个带有两个默认参数的函数

defpfoo(bar,baz,qux\\”,garply\\nil)


我有两个用法,一个只提供前两个参数,另一个全部4个参数。透析器抱怨永远不会调用
函数foo/3
。我假设这是因为它是私有的,两个默认值允许
展开节点/2
展开节点/3
,和
展开节点/4
。表面上,我可以放弃默认值,并在当前的
foo/2
调用中提供它们,但仅仅安抚透析器似乎很愚蠢。有没有办法在规范中指定这一点?

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

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

列出了所有可能的选项。

这是否意味着没有更好的方法来指定typespec?这真的是一个错误的警告吗?或者这是一种异味?我猜这是一种长生不老药的组合,总是产生所有的中间头。另一种方法是通过单独的函数调用“手动”定义默认值。那么您将只有/2和/4版本,而没有/3版本。