我必须遗漏一些非常简单的东西,因为这似乎不应该是这么难。
此代码是正确的:
clear all
whatever = @(x) deal(max(x), size(x));
input = randn(1,1000);
[a b] = whatever(input)
然而,我真正想要做的是这样的事情:
clear all
whatever = @(x) deal(q = 3; q*max(x), size(x));
input = randn(1,1000);
[a b] = whatever(input)
为什么这会破裂?我不能在函数内定义q?我想使用匿名函数的全部原因是我实际上可以在其中执行多行代码,然后返回一个答案。我想匿名函数的最后一个语句是返回的,但是如何在其中定义变量?我不想在匿名函数的定义之前定义q。
感谢。
答案 0 :(得分:5)
你不能在匿名函数中声明变量,因为它必须用表达式构造,即:handle = @(arglist)expr
如果您想要可读性,请在函数外部定义q
,如下所示:
q = 3;
whatever = @(x) deal(q * max(x), size(x));
答案 1 :(得分:2)
你没有。匿名函数只有一个语句。你使用子函数(不是嵌套函数,那些带有奇怪范围规则的病态)。
function whatever = not_anonymous (x)
% your code here
end
如果您需要传递函数句柄,可以使用@not_anonymous
。
答案 2 :(得分:2)
您如何看待以下构造:
tmpfun = @(x,q) deal...
whatever = @(x) tmpfun(x,3)
答案 3 :(得分:1)
我很确定交易不能接受多个命令。确实有多个参数,但是你试图传入命令。这会有用吗?
whatever = @(x) q=3; deal(q*max(x), size(x));
另外,你为什么不这样做?
whatever = @(x) deal(3*max(x), size(x));
如果你要在函数中定义它,你可能只是把实际值放在那里,如果你不能得到任何其他工作。