如何在Matlab中测试变量是否为函数句柄

tir*_*rth 17 validation matlab

如何测试/验证变量是matlab中的函数句柄?

它可能是这样的:

f=@(x)x+1
isFunctionHandle(f)
Run Code Online (Sandbox Code Playgroud)

is*内置的功能似乎不支持这种类型的测试?谁都知道?非常感谢

Ego*_*gon 30

正确的方法确实是通过一种is*功能,即isa:

if isa(f, 'function_handle')
    % f is a handle
else
    % f is not a handle
end
Run Code Online (Sandbox Code Playgroud)

编辑: 为了完整性,我想指出使用class()工作来检查某些东西是否是一个函数句柄.然而,与之不同的是isa,这并不能很好地概括为MATLAB的其他方面,例如面向对象编程(OOP),它们对MATLAB的工作方式产生越来越大的影响(例如绘图功能,控制工具箱,识别工具箱,...... .严重依赖于OOP).

对于人们熟悉的OOP:isa还检查的超类型(父类)x的对象someClass,而strcmp(class(x), 'someClass')显然只是所需的确切类型检查.

对于那些不了解OOP的人:我建议使用isa(x, 'someClass')而不是strcmp(class(x), 'someClass')因为这是两者中最方便(和通常有用)的行为.