2015-07-14 2 views
2

Работая над очень простым приложением в процессе изучения эликсира, я столкнулся с небольшим препятствием при проверке типов с помощью диализаторы. Запуск диализатора в моем коде приводит к ошибке Analysis failed ... До сих пор dialyzer только давал мне предупреждения, а не ошибки, когда я нарушаю спецификацию типа, поэтому я понятия не имею, что это за ошибка.«Диализатор: сбой анализа с ошибкой ..» (ошибка диализа или неправильное использование типа карты?)

Попытка сузить проблему, я сделал сверхпростую функцию, которая выполняет оскорбительное возвращаемое значение.

@spec blabla(integer) :: %{atom => any} 
    def blabla(1) do 
    %{:error => 'wrong input (US-state)'} 
    end 
    def blabla(2) do 
    %{ location: 'New York City, Central Park, NY', temp_c: '23.3', 
     visibility_mi: '10.00', weather: 'A Few Clouds', wind_dir: 'North', 
     wind_kt: '0' } 
    end 

При запуске диализатор на это я получаю следующее сообщение об ошибке

Proceeding with analysis... 
=ERROR REPORT==== 14-Jul-2015::17:26:55 === 
Error in process <0.31.0> with exit value: {function_clause,[{erl_types,t_form_to_string,[{type,12,map_field_assoc,{type,12,atom,[]},{type,12,any,[]}}],[{file,"erl_types.erl"},{line,4546}]},{erl_types,t_form_to_string_list,2,[{file,"erl_types.erl"},{line,4637}]},{erl_types,t_form_to_string... 


dialyzer: Analysis failed with error: 
{function_clause,[{erl_types,t_form_to_string, 
          [{type,12,map_field_assoc, 
            {type,12,atom,[]}, 
            {type,12,any,[]}}], 
          [{file,"erl_types.erl"},{line,4546}]}, 
        {erl_types,t_form_to_string_list,2, 
          [{file,"erl_types.erl"},{line,4637}]}, 
        {erl_types,t_form_to_string,1, 
          [{file,"erl_types.erl"},{line,4634}]}, 
        {erl_types,t_form_to_string,1, 
          [{file,"erl_types.erl"},{line,4590}]}, 
        {dialyzer_contracts,contract_to_string_1,1, 
             [{file,"dialyzer_contracts.erl"}, 
             {line,107}]}, 
        {dialyzer_contracts,extra_contract_warning,6, 
             [{file,"dialyzer_contracts.erl"}, 
             {line,712}]}, 
        {dialyzer_contracts,picky_contract_check,7, 
             [{file,"dialyzer_contracts.erl"}, 
             {line,686}]}, 
        {dialyzer_contracts,get_invalid_contract_warnings_funs,5, 
             [{file,"dialyzer_contracts.erl"}, 
             {line,654}]}]} 

Am I определяя карту типа в неправильном направлении? или это какая-то ошибка в диализаторе?

ответ

2

С кодом или типами нет ничего плохого. Похоже на ошибку диализатора, вы можете попробовать обновиться до последней версии Erlang.

+0

спасибо, модернизация от erlang OTP от 17 до 18, казалось, помогла – Michelrandahl