Check if a function handle is valid

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 日

1 投票

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 件のコメント

Sean de Wolski
Sean de Wolski 2014 年 9 月 19 日
This could fail if the function is an anonymous function which doesn't have a file.
x = @(x)x^2;
Kurt Schmutz
Kurt Schmutz 2014 年 9 月 22 日
Hi Sean,
obviously it will fail in this case!
Thanks for the hint :)
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 日

0 投票

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 日

0 投票

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 日

0 投票

You might be interested in the function ISFUNCTION .

カテゴリ

ヘルプ センター および File ExchangeScope Variables and Generate Names についてさらに検索

製品

質問済み:

2014 年 7 月 1 日

コメント済み:

2021 年 2 月 26 日

Community Treasure Hunt

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

Start Hunting!

Translated by