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

Posted

技术标签:

【中文标题】如何在 Matlab 中测试变量是不是是函数句柄【英文标题】:how to test a variable is a function handle or not in Matlab如何在 Matlab 中测试变量是否是函数句柄 【发布时间】:2011-10-23 15:55:51 【问题描述】:

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

可能是这样的:

f=@(x)x+1
isFunctionHandle(f)

is* 内置函数似乎不支持这些类型的测试?有人知道吗?非常感谢

【问题讨论】:

另见this question,它测试有效性(有代码支持它)以及作为函数句柄。 【参考方案1】:

正确的方法确实是通过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'),因为这是两者中最方便(也是最常用)的行为。

【讨论】:

【参考方案2】:

你可以使用class()函数:

f = @(x)x+1

f = 

    @(x)x+1

>> class(f)

ans =

function_handle

(这是一个包含文本'function_handle'的字符串)

【讨论】:

以上是关于如何在 Matlab 中测试变量是不是是函数句柄的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中函数句柄总结复盘

MATLAB 的函数句柄

在 MATLAB 中删除对象句柄并保留变量

matlab中如何取消plot画的图

在VB里面如何用postmessage函数向已知句柄的窗体发送单击鼠标的消息

如何在MATLAB中获取变量的类型