How to call a created function in a different function

26 vues (au cours des 30 derniers jours)
Jongan Park
Jongan Park le 14 Jan 2020
Modifié(e) : Stephen23 le 27 Juil 2021
Hi there!
I made several functions like myfunc1.m , myfunc2.m, myfunc3.m and so on.
they all take one function and two doubles, and they output 2 arrays like this.
function [X Y] = myfunc3(f, a, b)
% ------------------------
% --Doing Something like--
% -- x = a:b --
% -- y = 3*x --
% -- X = x --
% -- Y = f(x,y) --
% ------------------------
end
Im trying to make a new function that takes one of my functions as its argument. Expected outputs will be like this.
>> myNewfunc(@ myfunc3)
ans =
'It is my 3rd function!'
>> myNewfunc(@ myfunc2)
ans =
'It is my 2nd function!'
so I wrote like this to call a function in the new function
function myNewfunc(myfunc)
% --------------------------------
% -- %Hard Coded f, a, b --
% -- f = @(x,y) x + y --
% -- a = 1 --
% -- b = 10 --
% -- [X Y] = myfunc(f,a,b) --
% --------------------------------
%
%Somehow Check and disp its number
%
end
but it gets an error at the line of [X Y] = myfunc(f, a, b) and shows "Reference to a cleared variable myfunc."
How can I tell Matlab I am trying to call one of created functions in another function?
Thank you! and any help will be appreciated.

Réponse acceptée

Stephen23
Stephen23 le 14 Jan 2020
Modifié(e) : Stephen23 le 27 Juil 2021
Download my FEX submission num2ord and use it together with func2str:
function out = myNewFunc(fun)
val = str2double(regexp(func2str(fun),'\d+$','once','match'));
out = sprintf('It is my %s function!',num2ord(val));
end
Tested:
>> myNewFunc(@myfunc3)
ans =
It is my 3rd function!
See also:
Tip: rather than creating numbered functions, which will be hard to access and just clutter up the workspace, you might like to consider simply creating a cell array of function handles (which can be trivially accessed using indexing):
C = {@(...)..., @(...)..., ...} % define
C{1}(...) % call the first function
  1 commentaire
Jongan Park
Jongan Park le 14 Jan 2020
Thank you so much for the detailed answer and useful tip!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by