Я пытаюсь выполнить преобразование таблицы mnesia для обновления схемы. В моей новой схеме я удалил одно поле из моего предыдущего определения записи. Остальная часть схемы остается неизменной. Вот некоторые коды:Ошибка Dialyzer при удалении поля из записи
XformFun = fun(OldRecord) ->
NewRecord = #bdm_employee{id=element(2, OldRecord), name=element(3, OldRecord),
address=element(4, OldRecord),
job_type=element(6, OldRecord),
...
description=element(34, OldRecord)},
NewRecord
end,
mnesia:transform_table(bdm_employee, XformFun, record_info(fields, bdm_employee))
В моей первоначальной записи было 34 поля. После удаления 5-го поля диализер жалуется на попытку доступа к индексу вне диапазона записи для элемента № 34. Тем не менее, я нахожу это странным, так как «mnesia: transform_table» может выполняться на любой записи, размер которой может быть 34, 33 или что-то еще. Зачем жаловаться диализер? Цените некоторые рекомендации для фиксации этого ...
диализных error-
dialyzer: Analysis failed with error:
{function_clause,[{lists,nth,2,[]},
{dialyzer_typesig,find_element,2,[]},
{dialyzer_typesig,get_bif_constr,4,[]},
{dialyzer_typesig,handle_call,3,[]},
{dialyzer_typesig,traverse,3,[]},
{dialyzer_typesig,handle_clauses_1,7,...},
{dialyzer_typesig,handle_clauses,...},
{dialyzer_typesig,...}]}
У вас есть '-спец' для вашего преобразования? Я предполагаю, что диализер запутался в типе OldRecord. –
У меня нет спецификации для преобразования, но я обнаружил пару утверждений в начале преобразования, которые обрабатывали OldRecord как тип записи bdm_employee. Это отбрасывает диализатор при попытке доступа к дополнительному элементу. – Yashesh