Check if a function handle is valid
15 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ryan
el 1 de Jul. de 2014
Comentada: Steven Lord
el 26 de Feb. de 2021
I use str2fun(...) to create a function handle from a user-inputted string. I want to be able to run a check to make sure the function created is valid and no typos were made. I could not find a way to do this. Any suggestions?
Thanks, Ryan
MATLAB R2014a
1 comentario
Steven Lord
el 26 de Feb. de 2021
What is a "valid" function handle?
f = @quit; % NOTE: Don't execute f if you have data in your MATLAB session you need!
f is a "valid" function handle in that it won't error when called. But you may not want users to enter 'quit' as the user-inputted string and blindly evaluate that function handle -- the "Bobby Tables" scenario.
g = @() zeros(1:12); % MAY error or MAY succeed and take a LONG time doing so
This may successfully execute (though it may take a while) or may throw an error depending on your computer's memory availability and your MATLAB settings. Is it "valid"?
Respuesta aceptada
Kurt Schmutz
el 18 de Sept. de 2014
Hi Ryan
To CHECK whether a function handle is valid or not (without trial-and-error) you can do the following:
f = str2func('nameofthefunction')
fh = functions(f)
if isempty(fh.file)
% invalid :(
else
% valid :)
end
Note: file "nameofthefunction.m" must be in the current folder
Cheers, Kurt
MATLAB R2013b
4 comentarios
Más respuestas (3)
Sean de Wolski
el 1 de Jul. de 2014
try
fun()
catch
disp 'didn''t work'
end
Try it and catch failures. Or provide a listbox with known functions to remove the human typing element.
0 comentarios
Ryan
el 1 de Jul. de 2014
1 comentario
Sean de Wolski
el 1 de Jul. de 2014
Well if you catch the MException, you could look at the message of it.
...
catch ME
ME.message
end
Ver también
Categorías
Más información sobre Performance and Memory en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!