为什么我不能在MATLAB匿名函数中定义变量?

时间:2012-09-01 16:19:59

标签: function matlab anonymous-function

我必须遗漏一些非常简单的东西,因为这似乎不应该是这么难。

此代码是正确的:

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。

感谢。

4 个答案:

答案 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));

如果你要在函数中定义它,你可能只是把实际值放在那里,如果你不能得到任何其他工作。