我必须失去了一些东西很简单,因为这并不看起来应该是这样辛苦。
此代码是正确的:
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值。
谢谢。
你不能匿名函数内声明的变量,因为它必须从表达来构建, 即 : handle = @(arglist)expr
如果你想可读性,定义q
之外的功能,就像这样:
q = 3;
whatever = @(x) deal(q * max(x), size(x));
你不知道。 匿名函数只有一个声明。 您可以使用子功能为(不嵌套功能,这些都是用异样的作用域规则生病的事情)。
function whatever = not_anonymous (x)
% your code here
end
如果你需要传递函数处理,你可以只使用@not_anonymous
。
你认为以下结构的内容:
tmpfun = @(x,q) deal...
whatever = @(x) tmpfun(x,3)
我敢肯定的交易不能在多个命令接受。 多个参数,当然,但你想在命令中传递。 将这项工作?
whatever = @(x) q=3; deal(q*max(x), size(x));
另外,你为什么不只是有这个?
whatever = @(x) deal(3*max(x), size(x));
如果你要在函数中定义它,你可能也只是把实际价值在那里,如果你不能让别的工作。