Can I call a function defined within another function .m file?

13 visualizaciones (últimos 30 días)
Paul
Paul el 21 de Jun. de 2018
Respondida: Guillaume el 21 de Jun. de 2018
Hello. Consider a file titled giveA.mat :
function A = giveA(argA)
% Main function
b = giveB(argB);
...
end
function b = giveB(argB) % defined within one file
% simple sub-function
end
% End of file
I'd like to call giveB() somewhere else in the code, but it would be very convenient for me to keep this function as is.
Is there a syntax which will allow this, i.e. can I call giveB() from, say someOtherFunction(). I expect something like
b = givA(argA)/giveB(argB)
or
b = giveA(argA)>giveB(argB)
as this is how Matlab displays location of giveB() in error messages.

Respuesta aceptada

Guillaume
Guillaume el 21 de Jun. de 2018
As is, it is not possible. Local functions can only be accessed from within the files where they are defined.
The only way to export a local function is to pass a handle to it from the main function of the m file, so you would have to modify your giveA to return a handle to giveB, which would not be compatible with your desired syntax.
What you could do is to wrap both functions in a class:
classdef FunContainer
methods (static)
function A = giveA(argA)
%...
end
function B = giveB(argB)
%...
end
end
end
which you can use as
b = FunContainer.giveA(A) / FunContainer.giveB(B)

Más respuestas (2)

Fangjun Jiang
Fangjun Jiang el 21 de Jun. de 2018
No. It is a local function. If it needs to be used outside, it has to be saved in a separate .m file.

OCDER
OCDER el 21 de Jun. de 2018
The next closest thing is to define an object class with static methods (give.m)
%give.m
classdef give
methods(Static)
function A = A(argA)
A = argA;
disp('I gave A');
end
function B = B(argB)
B = argB;
disp('I gave B');
end
end
end
To use "giveA", use "give.A" instead.
D = give.A(3)/give.B(10);

Categorías

Más información sobre Function Creation en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by