3

如果我将匿名函数传递给arrayfun如下:

arrayfun(@(x)sprintf('%.2g\\pi', x/pi), [0 6 7 8], 'uni', 0)

我得到以下结果:

ans = 
    '0\pi'    '1.9\pi'    '2.2\pi'    '2.5\pi'

但是,如果我声明一个单独的函数:

function y = sprint_func_0(x)
    sprintf('%.2g\\pi', x/pi)
end

并将其传递给arrayfun

arrayfun(@(x)sprint_func_0(x), [0 6 7 8], 'uni', 0)

结果是:

ans =
    0\pi

ans =
    1.9\pi

ans =
    2.2\pi

ans =
    2.5\pi

为什么我在第一种情况下得到一个输出,而在第二种情况下得到许多输出?这可能很愚蠢,但我无法在任何地方找到答案。

4

1 回答 1

5

在第一种情况下,匿名函数返回一个字符串,因此arrayfun返回一个字符串元胞数组。

在第二种情况下,该函数不会为输出参数分配值y(本质上是将输出打印sprintf到命令窗口)。

如果将函数修改sprint_func_0为:

function y = sprint_func_0(x)
    y = sprintf('%.2g\\pi', x/pi); %// Note the assignment to y
end

你应该得到相同的结果。

于 2013-08-21T12:09:40.567 回答