我为什么不能定义MATLAB匿名函数里面的变量?(Why cant I define a varia

2019-09-22 01:40发布

我必须失去了一些东西很简单,因为这并不看起来应该是这样辛苦。

此代码是正确的:

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 10 整个原因,我想用匿名函数是这样,我其实可以在其中做多行代码,然后返回一个答案。 我想,一个匿名函数的最后一条语句返回什么,但我怎么在其中定义变量? 我不想匿名函数的定义之前定义Q值。

谢谢。

Answer 1:

你不能匿名函数内声明的变量,因为它必须从表达来构建, handle = @(arglist)expr

如果你想可读性,定义q之外的功能,就像这样:

q = 3;
whatever = @(x) deal(q * max(x), size(x));


Answer 2:

你不知道。 匿名函数只有一个声明。 您可以使用子功能为(不嵌套功能,这些都是用异样的作用域规则生病的事情)。

function whatever = not_anonymous (x)
  % your code here
end

如果你需要传递函数处理,你可以只使用@not_anonymous



Answer 3:

你认为以下结构的内容:

tmpfun = @(x,q) deal...
whatever = @(x) tmpfun(x,3)


Answer 4:

我敢肯定的交易不能在多个命令接受。 多个参数,当然,但你想在命令中传递。 将这项工作?

whatever = @(x) q=3; deal(q*max(x), size(x));

另外,你为什么不只是有这个?

whatever = @(x) deal(3*max(x), size(x));

如果你要在函数中定义它,你可能也只是把实际价值在那里,如果你不能让别的工作。



文章来源: Why cant I define a variable inside a MATLAB anonymous function?