私は次の機能を持っています:
-spec check_connection_header(list()) -> atom().
check_connection_header([{<<"Connection">>, <<"close">>}|_]) ->
close;
check_connection_header([{<<"Connection">>, <<"Close">>}|_]) ->
close;
check_connection_header([{<<"connection">>, <<"close">>}|_]) ->
close;
check_connection_header([{<<"connection">>, <<"Close">>}|_]) ->
close;
check_connection_header([_|Rest]) ->
check_connection_header(Rest);
check_connection_header([])->
keep_alive.
そして、ダイアライザーを実行すると、次の出力が得られます。
131: The pattern [{<<67:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1,110:8/integer-unit:1,101:8/integer-unit:1,99:8/integer-unit:1,116:8/integer-unit:1,105:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1>>, <<99:8/integer-unit:1,108:8/integer-unit:1,111:8/integer-unit:1,115:8/integer-unit:1,101:8/integer-unit:1>>} | _] can never match the type []
134: The pattern [{<<67:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1,110:8/integer-unit:1,101:8/integer-unit:1,99:8/integer-unit:1,116:8/integer-unit:1,105:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1>>, <<67:8/integer-unit:1,108:8/integer-unit:1,111:8/integer-unit:1,115:8/integer-unit:1,101:8/integer-unit:1>>} | _] can never match the type []
137: The pattern [{<<99:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1,110:8/integer-unit:1,101:8/integer-unit:1,99:8/integer-unit:1,116:8/integer-unit:1,105:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1>>, <<99:8/integer-unit:1,108:8/integer-unit:1,111:8/integer-unit:1,115:8/integer-unit:1,101:8/integer-unit:1>>} | _] can never match the type []
140: The pattern [{<<99:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1,110:8/integer-unit:1,101:8/integer-unit:1,99:8/integer-unit:1,116:8/integer-unit:1,105:8/integer-unit:1,111:8/integer-unit:1,110:8/integer-unit:1>>, <<67:8/integer-unit:1,108:8/integer-unit:1,111:8/integer-unit:1,115:8/integer-unit:1,101:8/integer-unit:1>>} | _] can never match the type []
143: The pattern [_ | Rest] can never match the type []
私はダイアライザーを初めて使用し、ダイアライザーの出力を解釈するのに苦労しています。関数の最初の 5 つの句が [] に一致しないと言っているのは理解していますが、6 番目の句で空のリストを一致させているため、これは私の意図によるものです。
私の erlang のバージョンは Erlang/OTP 19.0 で、ダイアライザーのバージョンは v3.0 です。
興味深い発見は、dialyzer v2.8 と Erlang/OTP 18 を別のマシンで実行したときに、dialyzer が上記のコードについて文句を言わないことです。
私がこれまでに試したこと:
私は erlang のバイナリの経験があまりないので、最初はバイナリ パターン マッチングを誤解していたのではないかと思いましたが、そうではないようです。関数は私のテスト ケースに合格します (パラメーターとして [] を使用して関数を呼び出すことは問題ありません)。また、関数の先頭でバイナリを通常の文字列に置き換えると、ダイアライザーから同じ苦情が発生します。
plt を再構築し、プロジェクトをクリーンアップしました
前もって感謝します