问题描述:

A = imread(filename, fmt)

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

The above is in the synopsis part of imread, which seems to say that the return value of a MATLAB function depends on how it's called? Is that true?

网友答案:

IMREAD function is defined as

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

In your 2 examples A and X will be the same, but in the second case there will be additional variable map.

There is a way in MATLAB to define variable output if you use VARARGOUT in function definition:

function varargout = foo(x)

So you can output different values based on some condition in the function body.

This is a silly example, but it illustrates the consept:

function varargout = foo(a,b)
if a>b
    varargout{1} = a+b;
    varargout{2} = a-b;
else
    varargout{1} = a;
    varargout{2} = b;
end

Then

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

The output arguments can be even different data types.

Another example with condition based on number of output variables:

function varargout = foo(a,b)
if nargout < 2
    varargout{1} = a+b;
else
    varargout{1} = a;
    varargout{2} = b;
end

Then

[x,y] = foo(2,3)
x =
     2
y =
     3
x = foo(2,3)
x =
     5
网友答案:

Yes, matlab has a mechanism to provide variable amount results, and also for the input parameters.

You can use it yourself when you write functions, see the documentation about narg* on Mathwork to learn more.

Take for example the histogram function

> hist(1:100); % generates a plot with the 10 bins
> hist(1:100, 4); % generates a plot with 4 bins
> fillrate = hist(1:100, 4); % returns the fill rate for the 4 bins
> [fillrate, center] = hist(1:100,4); % returns the fill rate and the bins center in 2 differen variables
相关阅读:
Top