Is it possible to call a subfunction inside a function mscript?

40 vues (au cours des 30 derniers jours)
Ray Lee
Ray Lee le 16 Fév 2015
Modifié(e) : Stephen23 le 17 Fév 2018
Is it possible to call a subfunction inside a mscript function and get the returned value?
e.g., the content of 'func.m' as below
function b = func(a)
b = subfunc(a) +1;
function c = subfunc(a)
c = a*2;
Can I call subfunc directly in the matlab workspace.
  3 commentaires
Ray Lee
Ray Lee le 17 Fév 2015
For instance, a function Func is stored in file 'Func.m'. In 'Func.m', there is a function SubFunc called by the main Func function. I wanna if I can excute the SubFunc function in 'Func.m' directly.
Stephen23
Stephen23 le 18 Fév 2015
Modifié(e) : Stephen23 le 17 Fév 2018
MATLAB does not mention "subfunctions". Other functions in the same Mfile are either local functions or nested functions.
Do not call any function a "script", as a script is something quite different from a function.
"I wanna if I can excute the SubFunc function in 'Func.m' directly": lets look at the two possible cases for this:
  • If Func is the main function on that Mfile, then it can call any local function in the same Mfile.
  • If Func is a script then from version R2016b you can add local functions. With earlier versions doing so will throw an error.

Connectez-vous pour commenter.

Réponse acceptée

Thorsten
Thorsten le 16 Fév 2015
No. You have to create a separate mfile that can be called by your mscript.

Plus de réponses (2)

Jan
Jan le 25 Jan 2017
You can do this by a wrapper:
function Fcn = main
Fcn.func = @func;
Fcn.subfunc = @subfunc;
function b = func(a)
b = subfunc(a) +1;
function c = subfunc(a)
c = a*2;
Now you can call from the outside:
Fcn = main();
Fcn.func(1)
Fcn.subfunc(2)

Adam
Adam le 16 Fév 2015
Modifié(e) : Adam le 18 Fév 2015
You can call a sub-function from a main function in an m-file.
You cannot call a sub-function from a script (what would the function be 'sub' of?!). If you need to then just turn your script into a function.
Edit: In response to your edited question, then Yes, what you are doing is creating a function file and then within it defining subfunctions which are only accessible to the main function of that file.
This does seem like a question that you could have got the answer to yourself instantly though by simply putting that code in a file and running it!
  1 commentaire
Ray Lee
Ray Lee le 20 Fév 2015
Of course I know it is impossible to call the local function by excuting subfunc() from outside.
I'm asking if there is a way to call a local function from outside.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by