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