【问题标题】: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,它测试有效性(有代码支持它)以及作为函数句柄。

标签: matlab validation


【解决方案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'的字符串)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      相关资源
      最近更新 更多