Correct way to test if a value is a function?

61 views (last 30 days)
Geoff
Geoff on 3 May 2012
I'm using the following test to check if a value is a function (standard or anonymous):
if isa(value, 'function_handle')
disp('Yeah bro');
else
disp('Nah bro');
end
This satisfies me for everything I've thrown at it so far, and it's pleasing to have code that speaks my regional dialect... I just wanted to check that this is the accepted way to do it in MatLab.
I didn't see an equivalent function (as there is for ischar, iscell and the like) but that could be because it's not a very common thing to do.
Out of indulgent curiosity, is there a test to see if a function is anonymous or not? Forget about whether there's a real-world use case for it. I decided that this works:
if isa(value, 'function_handle')
if strncmp(char(value), '@', 1)
disp('Anonymous as, bro');
else
disp('Average as, bro');
end
end
Obviously all this could be wrapped up into helpful little bundles devoid of Kiwi dialect...
isfun = @(f) isa(f, 'function_handle');
isstdfun = @(f) isfun(f) && ~strncmp(char(f), '@', 1);
isanonfun = @(f) isfun(f) && strncmp(char(f), '@', 1);
Anyone able to make this more concise? And is there an official word to describe functions declared with the function keyword? I kinda thought 'explicit' would suit.
Cheers =)
  6 Comments
per isakson
per isakson on 4 May 2012
I would replace char(f) by func2str(f), because it communicates the intent better. And the test strncmp(char(f), '@', 1) by strncmp( func2str(f), '@(', 2), because every(?) "string of a function_handle" starts with a "@".
Geoff
Geoff on 7 May 2012
I think the char() conversion does exactly that: sees I have passed a function handle and calls func2str(). Calling on one of my own file-defined functions, it does not prefix with @ (nor does it prefix built-in functions). But thank you for pointing out the correct function to use =)

Sign in to comment.

Answers (1)

Sean de Wolski
Sean de Wolski on 4 May 2012
To test if a function is defined in a file with the keyword function, test the output of exist().
v = exist('some_script') %v = 1;
v = exist('some_function') %v = 2
  3 Comments
Sean de Wolski
Sean de Wolski on 8 May 2012
Hi Geoff, This was just to answer the last question in your question suite:
"And is there an official word to describe functions declared with the function keyword? I kinda thought 'explicit' would suit"
Geoff
Geoff on 11 May 2012
Oh right... I was actually talking about a word, and not code. Being a programmer, I find it frustrating to have hazy or verbose descriptions of an established programming construct such as "function that is defined in a file as opposed to being in-built or anonymous". So I meant that if I was going to write code to separate these out: "is_anonymous_function", "is_matlab_function", "is_????_function", then what word would best fit the ????. Are you saying it should be 'script'?

Sign in to comment.

Categories

Find more on Data Type Identification in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!