Clear Filters
Clear Filters

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

24 views (last 30 days)
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.

Accepted Answer

Guillaume
Guillaume on 21 Jun 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)

More Answers (2)

Fangjun Jiang
Fangjun Jiang on 21 Jun 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 on 21 Jun 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);

Products

Community Treasure Hunt

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

Start Hunting!