Correct way to test if a value is a function?

54 visualizaciones (últimos 30 días)
Geoff
Geoff el 3 de Mayo de 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 comentarios
per isakson
per isakson el 4 de Mayo de 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 el 7 de Mayo de 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 =)

Iniciar sesión para comentar.

Respuestas (1)

Sean de Wolski
Sean de Wolski el 4 de Mayo de 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 comentarios
Sean de Wolski
Sean de Wolski el 8 de Mayo de 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 el 11 de Mayo de 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'?

Iniciar sesión para comentar.

Categorías

Más información sobre Characters and Strings en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by