2016-04-05 13 views
2

私は「-Woverspecs」で透析装置を実行すると、この警告受けています:このコードでエリクサー、ダイアライザー、タイプとサブタイプ警告

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のドキュメントで参照してください?

答えて

2

-Woverspecsと入力すると、という制限付きのタイプがあると、Dialyzer自身の分析で推論できるものよりも警告が表示されます。

testU関数は、引数がaと異なる場合に値を返すこともあります。

あなたが探しているのは-Wunderspecsです。これは、あなたの仕様がの場合にDialeyzerが推測できるものよりも警告が出ます。

+0

質問の目的は、それが可能であるか実用的であるかにかかわらず、より制限的である方法です。 – user3264325

+0

それは私が言っていることです。スペックが「緩い」ときに警告したい場合は、Wunderspec – aronisstav

+0

を使用してください。スペックを制限したいのですが。たとえば、関数のIntsを強制的に制限し、Intsのみを許可するガードを追加する制限的な仕様を想像することができます。しかし、より複雑なタイプのガードを追加する方法を理解することはできません。 – user3264325

関連する問題