Можно ли использовать функцию в m файле, которая реализована в более поздней части того же файла: в аналогичном стиле с другими языками программирования, такими как C?
Поддерживаются ли декларации в MATLAB?
Ответ 1
Конечно.
В таком m файле локальные функции будут объявлены после основной функции. Например:
function y = main_func(x)
% # This is the main function
y = helper_func1(x) .* helper_func2(x); % # Just an example
function h1 = helper_func1(x)
% # This is a helper function #1
h1 = x + 2; % # Just an example
function h2 = helper_func2(x)
% # This is a helper function #2
h2 = x * 2; % # Just an example
В этом примере main_func
может без проблем вызвать helper_func1
и helper_func2
. Вы можете протестировать его и убедиться сами:
>> main_func(8)
ans =
160
Нет необходимости в форвардной декларации.
Кстати, много m файлов, которые поставляются с MATLAB, реализованы таким образом. Например, corrcoef
. С помощью type corrcoef
вы можете видеть это.
Примечание. Локальные определения функций не разрешены в приглашении или в скриптах, поэтому вам необходимо объявить "основную" функцию в вашем файле m. В качестве упражнения скопируйте мой пример в новый m файл, удалите объявление main_func
(только первая строка) и посмотрите, что произойдет.
Ответ 2
Вы можете использовать один и тот же файл m для реализации многих функций, используя статический класс:
Какова была первоначальная причина для одной функции MATLAB = один файл и почему это так?