Понимание результата диализатора
У меня есть следующая функция:
-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 предложений функции не могут совпадать с [], но это сделано с моей стороны, потому что я сопоставляю пустой список в шестом предложении.
Моя версия erlang - Erlang/OTP 19.0, а моя версия диализатора - v3.0.
Интересным открытием стало то, что диализатор не жалуется на приведенный выше код, когда я запускаю диализатор v2.8 и Erlang/OTP 18 на другой машине.
Вещи, которые я пробовал до сих пор:
Я не очень разбираюсь в двоичных файлах на эрланге, поэтому я сначала подумал, что неправильно понял сопоставление с двоичным шаблоном, но, похоже, это не так. Функция проходит мои тестовые случаи (вызов функции с [] в качестве параметра не вызывает проблем), а также, если я заменяю двоичные файлы обычными строками в функциональных головках, я получаю те же жалобы от диализатора.
Восстановил плт и почистил проект
заранее спасибо
1 ответ
Причиной предупреждений диализатора было то, что функция всегда вызывалась с [] из-за дефекта в моем коде.
Итак, в заключение: Диализер на этот раз тоже не ошибся:)