Ответ 1
+1 для очень интересного вопроса.
Я могу придумать способ определения этого. Разберите исполняемый файл m и проверьте первое слово в первой нетривиальной строке без комментария. Если это ключевое слово function
, это файл функции. Если это не так, это a script.
Здесь аккуратный однострочный:
strcmp(textread([mfilename '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
Результирующее значение должно быть 1, если оно является файлом функции, и 0, если оно script.
Имейте в виду, что этот код необходимо запускать из рассматриваемого m файла, а не из отдельного файла функций, конечно. Если вы хотите сделать из этого универсальную функцию (то есть проверять любой m файл), просто передайте искомую строку имени файла в textread
, например:
function y = isfunction(x)
y = strcmp(textread([x '.m'], '%s', 1, 'commentstyle', 'matlab'), 'function')
Чтобы сделать эту функцию более надежной, вы также можете добавить код обработки ошибок, который проверяет, что файл m фактически существует, прежде чем пытаться выполнить textread
его.