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

24 次查看(过去 30 天)
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.

采纳的回答

Guillaume
Guillaume 2018-6-21
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)

更多回答(2 个)

Fangjun Jiang
Fangjun Jiang 2018-6-21
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 2018-6-21
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);

类别

Help CenterFile Exchange 中查找有关 Whos 的更多信息

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by