免责声明:我实际上使用的是 Scilab,但它与 MATLAB 非常相似,根据我的研究,MATLAB 似乎也发生了同样的现象。
在 MATLAB 中,函数可以是多输出的。假设我们有一个函数function [a, b] = f(x)
。如果我输入:
c = f(x)
然后c
给出第一个输出的值。如果我输入:
[a, b] = f(x)
然后[a, b]
给出两个输出对的值。这似乎暗示 MATLAB 没有引用透明性。表达式的实际值是f(x)
多少?这是怎么回事?
免责声明:我实际上使用的是 Scilab,但它与 MATLAB 非常相似,根据我的研究,MATLAB 似乎也发生了同样的现象。
在 MATLAB 中,函数可以是多输出的。假设我们有一个函数function [a, b] = f(x)
。如果我输入:
c = f(x)
然后c
给出第一个输出的值。如果我输入:
[a, b] = f(x)
然后[a, b]
给出两个输出对的值。这似乎暗示 MATLAB 没有引用透明性。表达式的实际值是f(x)
多少?这是怎么回事?
这意味着该函数f(x)
通常返回 2 个输出。但是,当仅使用一个输出参数调用时,它将仅返回第一个(a
在您的情况下)。在 MATLAB 中,您还可以使用以下命令指定您对特定输出不感兴趣~
:
[~,b] = f(x);
[a,~] = f(x); % equivalent to a = f(x)
在某些情况下,请求输出的数量会改变行为,特别是在调用没有输出参数的函数时。
例如,这只是a
使用默认设置绘制数据的直方图:
hist(a);
接下来将直方图数据返回到N
. 没有产生情节:
N = hist(a);
但是,如果我们要求两个输出(X
现在是 bin 中心),我们可以绘制直方图bar
(如果没有给出输出参数,这是hist
内部用来绘制的):
[N, X] = hist(a);
bar(X,N);
此行为由检查来控制nargout
,并且可以合并到您自己的函数中。