2

「-Woverspecs」を指定して Dialyzer を実行していますが、次の警告が表示されます。

room_channel.ex:143:
Type specification 'Elixir.Backend.RoomChannel':
testU(a) -> a when is_subtype(a,#{})
is a subtype of the success typing: 'Elixir.Backend.RoomChannel':testU(_) -> any()

このコードで:

@spec testU( a ) :: a when a: %Backend.User{}
def testU(u) do
...

私がやりたいのは、ガードを使用して関数型を突き止めて、サブタイプ警告が消え、関数の正確な定義が得られるようにすることです。

-Woverspecs が推奨されていないことを Erlang のドキュメントで確認しました。私が考えられる唯一の解決策は、複雑な関数ガードです...

アイデアや指針はありますか?

4

1 に答える 1

2

を使用すると、Dialyzer 独自の分析で推測できるものよりも制限-Woverspecsの厳しい型がある場合に警告が表示されます。

あなたのインスタンスではtestU、引数が とは異なる場合に、関数が値を返すこともあるでしょうa

おそらくあなたが探しているのはで、 Dialyzer が推測できるものよりも仕様が寛容-Wunderspecsである場合に警告を生成します。

于 2016-04-05T13:15:44.983 に答える