Есть ли способ найти отсутствующие .m файлы ссылочных функций? - PullRequest
4 голосов
/ 08 апреля 2011

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

1 Ответ

2 голосов
/ 18 апреля 2011

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

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

Я полагаю, что причина этого в следующем: синтаксис для вызовов функций и индексов идентичен в 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-файлы из области видимости. Все эти причины приводят к тому, что решение этой проблемы непрактично (и, возможно, даже невозможно) для общего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...