Check if a function handle is valid

12 ビュー (過去 30 日間)
Ryan
Ryan 2014 年 7 月 1 日
コメント済み: Steven Lord 2021 年 2 月 26 日
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 件のコメント
Steven Lord
Steven Lord 2021 年 2 月 26 日
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"?

サインインしてコメントする。

採用された回答

Kurt Schmutz
Kurt Schmutz 2014 年 9 月 18 日
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 件のコメント
Ryan
Ryan 2014 年 9 月 22 日
Thanks Kurt. This worked for me since the function being used will never be anonymous.
Ryan
David Sinex
David Sinex 2021 年 2 月 26 日
This fails if the function is a class member.

サインインしてコメントする。

その他の回答 (3 件)

Sean de Wolski
Sean de Wolski 2014 年 7 月 1 日
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.

Ryan
Ryan 2014 年 7 月 1 日
I thought about the try, catch method but I want to be more descriptive in the error returned. I do not know all the known functions as it is a user created function that they are using instead of a default one.
  1 件のコメント
Sean de Wolski
Sean de Wolski 2014 年 7 月 1 日
Well if you catch the MException, you could look at the message of it.
...
catch ME
ME.message
end

サインインしてコメントする。


Jos (10584)
Jos (10584) 2014 年 9 月 19 日
You might be interested in the function ISFUNCTION .

カテゴリ

Help Center および File ExchangeScope Variables and Generate Names についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by