【发布时间】:2011-10-23 15:55:51
【问题描述】:
如何测试/验证一个变量是matlab中的函数句柄?
可能是这样的:
f=@(x)x+1
isFunctionHandle(f)
is* 内置函数似乎不支持这些类型的测试?有人知道吗?非常感谢
【问题讨论】:
-
另见this question,它测试有效性(有代码支持它)以及作为函数句柄。
标签: matlab validation
如何测试/验证一个变量是matlab中的函数句柄?
可能是这样的:
f=@(x)x+1
isFunctionHandle(f)
is* 内置函数似乎不支持这些类型的测试?有人知道吗?非常感谢
【问题讨论】:
标签: matlab validation
正确的方法确实是通过is*函数,即isa:
if isa(f, 'function_handle')
% f is a handle
else
% f is not a handle
end
编辑:
为了完整起见,我想指出,使用class() 可以检查某物是否是函数句柄。
然而,与isa 不同,这并不能很好地推广到 MATLAB 的其他方面,例如对 MATLAB 的工作方式产生越来越大影响的面向对象编程 (OOP)(例如绘图功能、控制工具箱、识别工具箱) , ... 很大程度上基于 OOP)。
对于熟悉 OOP 的人:isa 还会检查 x 对象的超类型(父类型)以查找 someClass,而 strcmp(class(x), 'someClass') 显然只检查确切的类型。
对于不了解 OOP 的人:我建议使用 isa(x, 'someClass') 而不是 strcmp(class(x), 'someClass'),因为这是两者中最方便(也是最常用)的行为。
【讨论】:
你可以使用class()函数:
f = @(x)x+1
f =
@(x)x+1
>> class(f)
ans =
function_handle
(这是一个包含文本'function_handle'的字符串)
【讨论】: