Несколько функций в одном.M файл вложенный или локальный, когда "end" не используется
в MATLAB вы можете иметь несколько функций в одном . Существует, конечно, основная функция, а затем либо вложенные или локальные функции.
примеры каждого типа функции:
% myfunc.m with local function ------------------------------------------
function myfunc()
disp(mylocalfunc());
end
function output = mylocalfunc()
% local function, no visibility of variables local to myfunc()
output = 'hello world';
end
% -----------------------------------------------------------------------
% myfunc.m with nested function -----------------------------------------
function myfunc()
disp(mynestedfunc());
function output = mynestedfunc()
% nested function, has visibility of variables local to myfunc()
output = 'hello world';
end
end
% ----------------------------------------------------------------------
разница ясна, когда вы используете функции'end
заявления. Однако я не думаю, что это четко документировано, что вы используете, когда вы этого не делаете, так как это допустимый синтаксис:
% myfunc.m with some other function
function myfunc()
disp(myotherfunc());
function output = myotherfunc()
% It's not immediately clear whether this is nested or local!
output = 'hello world';
есть ли четкое определение о том, пишутся ли функции как myotherfunc
локальные или вложенные?
1 ответов
Это можно быстро проверить из-за различий в области переменных указано в документации
основное различие между вложенными функциями и локальными функциями заключается в том, что вложенные функции могут использовать переменные, определенные в родительских функциях без явной передачи этих переменных в качестве аргументов.
Итак адаптации пример:
function myfunc()
% Define some variable 'str' inside the scope of myfunc()
str = 'hello world';
disp(myotherfunc());
function output = myotherfunc()
% This gives an error because myotherfunc() has no visibility of 'str'!
output = str;
это ошибки, потому что myotherfunc
is фактически локальная функция, не вложенная функция.
тест поддерживается документация для вложенных функций в которой говорится:
как правило, функции не требуют
end
заявление. Однако,гнездо любой в программе все функции в этом файле должны использоватьend
заявление.