2017-12-18 5 views
1

契約を破ることはありませんそれは型指定されたListで動作しないようです。少なくとも、この型指定を定義する文字列のリストを受け取るメソッドがあれば、警告は表示されません。型指定されたリストtypespecは、あなたがtypespecを定義し、パラメータの異なるタイプを使用する場合、それはのようなエラーが表示されます

すなわち、私はその後、リストのための任意の仕様を定義することができますし、透析器を実行しているとき、それは文句を言うことはありません:

@spec check?(list(boolean)) :: boolean 
@spec check?(list(Conn)) :: boolean 
@spec check?(list(number)) :: boolean 
@spec check?(list(integer)) :: boolean 

は意図していることですか?任意のタイプのリストを定義した場合のようです。[any()]

これを達成する他の方法はありますか?

答えて

2

この理由は、すべてのリストタイプに空のリストが有効な値として含まれているためです。

たとえば、次のような場合には:

  • あなたは関数が文字列の空の可能性リストを受け入れ

ダイアライザーが締結するブール値

  • の可能性が空のリストで関数を呼び出します可能な解決策がある、すなわちリストが空である場合。 Dialyzerは、特定のコードが常にクラッシュすると判断できる場合にのみ、警告を出力するため、この場合は印刷されません。

    私はこれに対する良い解決策を知らない。空でないリストを明示的に必要とする場合は、たとえばlist(boolean)の代わりにnonempty_list(boolean)です。

  • 関連する問題