2014-10-02 5 views
2

В MATLAB, вы можете объявить функцию зависимость с:Использование% # обозначений для объявления зависимостей

%#function myExtraFunctionName 

Это говорит MATLAB, что myExtraFunctionName требуется по сценарию или функции для работы, даже если она вызывается оператор eval или какой-либо другой метод, который не могут определить различные проверки или компиляторы зависимостей.

У меня есть несколько файлов, которые загружаются в .mat или другие файлы данных, необходимые для запуска сценария, и я хотел бы включить их аналогичным образом, чтобы при запуске проверки зависимостей, скажем, fList = matlab.codetools.requiredFilesAndProducts, он также найдет эти файлы данных. В конечном итоге то, что я хотел бы сделать, - это сгенерировать список файлов и передать его zip для архивирования всех файлов, необходимых для запуска данного скрипта или функции, включая файлы данных.

Пытаясь найти какую-либо документацию по этой функции является сложной задачей, так как помощь MATLAB не позволит вам просто ввести %# и поиск %#function просто ищет function. Google делает то же самое: «функция хеш-процента» возвращает много информации о хэш-таблицах, «% # function matlab» выделяет важные символы и «объявляет функцию matlab» «объявляет зависимость функции Matlab» не получается ничего полезного. Я не помню, где я столкнулся с этим синтаксисом, поэтому я даже не знаю, является ли это документированной функцией или нет.

У меня есть два вопроса:

  • Может кто-то мне точку в документации по этому синтаксису наряду с некоторыми подсказки относительно того, какие ключевые слова я должен использовать для поиска?

  • Может ли это использоваться для объявления зависимостей, отличных от m-файлов, а если нет, то как я могу это сделать?

ответ

3

%#function директива Прагма, которая информирует MATLAB Compiler, что указанная функция будет вызываться косвенным образом с помощью feval, eval или тому подобное.

Это важно, потому что анализатор статического кода не сможет самостоятельно определять такие зависимости. Например имя функции не могут быть сохранены в виде строки, как в:

fcn = 'myFunction'; 
feval(fcn) 

Насколько я знаю, это используется только MATLAB Compiler, ничего другого.

Есть other подобные прагмы. Например, MATLAB Coder имеет директиву %#codegen.

+0

Итак, слово «прагма» было тем, что я искал, и, конечно, функция% # - это заголовок страницы, который появляется при поиске «прагмы» в документе. Средство проверки зависимостей также использует прагму, и именно так я открыл ее как рудиментарный бит кода, который вставлял обесцененную функцию в список зависимостей. Любые мысли по второй части вопроса о том, как заставить средство проверки зависимостей включать не-m-файлы? – craigim

+0

Здесь есть несколько других вопросов относительно функции MATLAB [зависимости] (http://stackoverflow.com/questions/tagged/matlab+dependencies) и [code-analysis] (http://stackoverflow.com/questions/ tagged/matlab + code-analysis), с возможными решениями вашей проблемы. – Amro

+0

Я читал большинство из них раньше. Я не помню ничего о вспомогательных файлах, но я снова посмотрю. – craigim

0

У меня нет никакого ответа, но, возможно, вы можете использовать этот веб-сайт: http://www.symbolhound.com/

Это позволит вам сделать поиск с помощью символов.

+0

Полезно знать, но, увы, нет кубиков. Поиск дал 4 вопроса о стеке, только два из которых фактически имели строку '% # function' в любом месте, ни одно из которых не могло что-либо сказать о синтаксисе. – craigim

+1

@craigim: осторожно, чтобы многие люди (включая меня) использовали символы '% #' или '% //' здесь, в Stack Overflow, чтобы правильно подсвечивать комментарии (мы [все еще ожидаем] (http: //meta.stackexchange. com/a/137865/135945) для корректного отображения кода MATLAB на SO).Это не имеет ничего общего с реальной прагмой! – Amro

Смежные вопросы