A = imread(filename, fmt)

[X, map] = imread(...)

上面是imread的摘要部分,这似乎表明MATLAB函数的返回值取决于调用它的方式?真的吗?

最佳答案

IMREAD函数定义为

function [X, map, alpha] = imread(varargin)

在您的两个示例中,A和X相同,但是在第二种情况下,将存在其他变量map

如果在函数定义中使用VARARGOUT,则MATLAB中有一种方法可以定义变量输出:
function varargout = foo(x)

因此,您可以根据函数体中的某些条件输出不同的值。

这是一个愚蠢的例子,但它说明了概念:
function varargout = foo(a,b)
if a>b
    varargout{1} = a+b;
    varargout{2} = a-b;
else
    varargout{1} = a;
    varargout{2} = b;
end

然后
[x,y] = foo(2,3)
x =
     2
y =
     3
[x,y] = foo(3,2)
x =
     5
y =
     1

输出参数甚至可以是不同的数据类型。

另一个基于输出变量数量的条件示例:
function varargout = foo(a,b)
if nargout < 2
    varargout{1} = a+b;
else
    varargout{1} = a;
    varargout{2} = b;
end

然后
[x,y] = foo(2,3)
x =
     2
y =
     3
x = foo(2,3)
x =
     5

08-24 14:44