# How to call a created function in a different function

4 views (last 30 days)
Jongan Park on 14 Jan 2020
Commented: Jongan Park on 14 Jan 2020
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.

Stephen Cobeldick on 14 Jan 2020
Edited: Stephen Cobeldick on 14 Jan 2020
function out = myNewFunc(fun)
val = str2double(regexp(func2str(fun),'\d+\$','once','match'));
out = sprintf('It is my %s function!',num2ordinal(val));
end
Tested:
>> myNewFunc(@myfunc3)
ans =
It is my 3rd function!
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 Comment

Jongan Park on 14 Jan 2020
Thank you so much for the detailed answer and useful tip!