Есть ли способ найти отсутствующие .m файлы функций, на которые есть ссылки?

Ошибка выполнения возникает, когда интерпретатор Matlab интерпретирует функцию, которая не реализована в .m-файле. Есть ли способ найти эти ошибки «во время компиляции», т.е. существует ли сценарий, который анализирует мой код Matlab, проверяет все вызываемые функции и сообщает мне, какие .m-файлы отсутствуют (в отношении моих определенных путей)?


person secr    schedule 08.04.2011    source источник
comment
См .: stackoverflow.com/questions/95760/   -  person jonsca    schedule 08.04.2011


Ответы (1)


Быстрый ответ: Нет.

Depfun был бы моей первой попыткой решить эту проблему, но он дает вам только список зависимостей, которые существуют на пути, а не тех, которых не существует. Точно так же млинт и млинтмекс не так полезны для этого, как я ожидал.

Я считаю, что причина этого в следующем: синтаксис для вызовов функций и индексов идентичен в MATLAB.

Единственный способ узнать, является ли foo (bar) вызовом функции для «foo.m» или попыткой добавить индекс в матрицу «foo», - выполнить код до этой точки и посмотреть, есть ли матрица «foo» существует в области видимости и / или если на пути существует foo.m. Если оба существуют, то правила приоритета MATLAB решают, обрабатывается ли символ «foo» как вызов функции или как операция индексации.

В следующем игрушечном примере выражение «неоднозначное (1: 9)» сначала обрабатывается как вызов функции, а затем как операция индексации:

function test

    disp( ambiguous( 1:9 ) )
    ambiguous = 'data item';
    disp( ambiguous( 1:9 ) )

end
function szMsg = ambiguous( anArgument )
    szMsg = 'function call';
end

Также возможно создавать переменные, используя eval и evalin, и манипулировать путем MATLAB, чтобы вводить и выводить m-файлы за пределы области видимости. Все эти причины сводятся к тому, чтобы сделать решение этой проблемы непрактичным (и, возможно, даже невозможным) для общего случая.

person William Payne    schedule 18.04.2011