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

Function 为什么我不能在MATLAB匿名函数中定义一个变量?,function,matlab,anonymous-function,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(inpu

我一定错过了一些非常简单的东西,因为这看起来不应该这么难

此代码是正确的:

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 = 3;
whatever = @(x) deal(q * max(x), size(x));
为什么会破裂?我无法在函数中定义q??我想使用匿名函数的全部原因是,我可以在其中执行多行代码,然后返回答案。我假设匿名函数的最后一条语句是返回的,但是如何在其中定义变量呢?我不想在定义匿名函数之前定义q


谢谢

我很确定deal不能接受多个命令。当然有多个参数,但您正在尝试传递命令。这样行吗

whatever = @(x) q=3; deal(q*max(x), size(x));
还有,你为什么不买这个

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

如果您要在函数中定义它,那么如果您无法获得任何其他功能,那么最好将实际值放在那里

你没有。匿名函数只有一条语句。您可以使用子函数(不是嵌套函数,它们是带有奇怪作用域规则的病态函数)


如果需要传递函数句柄,只需使用
@not_anonymous

您不能在匿名函数中声明变量,因为它必须由表达式构造,即:
handle=@(arglist)expr

如果想要可读性,请在函数外部定义
q
,如下所示:

clear all
whatever = @(x) deal(q = 3; q*max(x), size(x));
input = randn(1,1000);
[a b] = whatever(input)    
q = 3;
whatever = @(x) deal(q * max(x), size(x));

您对以下结构有何看法:

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

你不能。是什么阻止你做
@(x)交易(最大3*x,大小x))
?@EitanT我可以这么做。我问这个问题的原因是因为我希望q是一个非常复杂的函数,所以它将是一个占位符,这样代码最终是可读的。我的印象是,我可以像编写实际函数一样编写匿名函数。这是为了人类的可读性。“这行吗?”——你是在问还是在回答?顺便说一句,答案是:它不起作用。Camdroid,请将我的评论发送给上面的@EitanT。这是为了人类将来的可读性。嵌套函数万岁!:P