如果我将匿名函数传递给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
为什么我在第一种情况下获得一个输出而在第二种情况下获得许多输出?这可能是愚蠢的,但我无法在任何地方找到答案。
答案 0 :(得分: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
你应该得到相同的结果。