2017-07-13 38 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