【问题标题】:How do I call a function handle from cell array?如何从单元格数组中调用函数句柄?
【发布时间】:2014-04-17 15:13:17
【问题描述】:

我尝试做的是保留一个函数句柄的单元数组,然后在循环中调用其中一个。它不起作用,在我看来,我得到的只是一个 1x1 单元格数组,而不是其中的函数句柄。

我不固定使用元胞数组,所以如果另一个集合有效,我没问题。

这是我的代码:

func_array = {@(x) x, @(x) 2*x }
a = func_array(1) %%% a = @(x) x
a(2) %%% (error-red) Index exceeds matrix dimensions.
a(0.2) %%% (error-red) Subscript indices must either be real positive integers or
logicals.

谢谢 阿米尔

【问题讨论】:

    标签: arrays matlab anonymous-function


    【解决方案1】:

    问题出在这一行:

    a = func_array(1)
    

    您需要访问元胞数组的内容,而不是元素。

    a = func_array{1}
    

    一切正常。命令窗口中的视觉输出看起来相同,这确实有点误导,但请查看工作区以了解差异。

    正如 chappjc 在 cmets 中提到的,中间变量不是必需的。您可以按如下方式调用您的函数:

    func_array{2}(4)    %// 2*4
    
    ans =  8
    

    错误解释:

    a(2) %%% (error-red) Index exceeds matrix dimensions.
    

    a 仍然是一个元胞数组,但只有一个元素,因此a(2) 超出范围。

    a(0.2) %%% (error red) Subscript indices must either be real positive ...
    

    ... 并且数组不能用小数索引。但这不是你的意图;)

    【讨论】:

    • 这个。 +1 您还可以使用级联索引直接运行该函数,例如func_array{1}(0.2)
    • @chappjc 是的,我补充说:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多