Main Content

deal

将输入分发到输出

说明

示例

注意

在大多数情况下,您不需要 deal 函数。在访问元胞数组和结构体字段的内容时,请使用数组索引和以逗号分隔的列表,如以下语法中所示。

[A1,...,An] = C{:}
[B1,...,Bn] = S(:).field

有关详细信息,请参阅逗号分隔的列表

但是,在某些情况下,当您需要从通常返回单个输出的运算中获得多个输出时,deal 可能会很有用。例如,您可以使用 deal 来实现以下目的:

  • 为元胞数组的多个元胞赋值。

  • 为非标量结构体数组的字段赋值。

  • 从匿名函数返回多个输出。

[B1,...,Bn] = deal(A1,...,An) 复制输入参量 A1,...,An,并将它们作为输出参量 B1,...,Bn 返回。它与 B1 = A1、…、Bn = An 相同。在此语法中,输入和输出参量的数目必须相同。

[B1,...,Bn] = deal(A) 复制单个输入参量 A,并将其作为输出参量 B1,...,Bn 返回。它与 B1 = A、…、Bn = A 相同。在此语法中,您可以指定任意数目的输出参量。

示例

全部折叠

创建一个元胞为空的 1×3 元胞数组。

C = cell(1,3)
C=1×3 cell array
    {0x0 double}    {0x0 double}    {0x0 double}

创建三个变量。通过使用 deal,将其值赋给 C 的元胞。语法 C{:} 创建以逗号分隔的元胞列表,您可以使用花括号来访问其内容。当调用 deal 时,您可以将此列表视为输出参量列表。

A1 = 100;
A2 = "foo";
A3 = 1:5;
[C{:}] = deal(A1,A2,A3)
C=1×3 cell array
    {[100]}    {["foo"]}    {[1 2 3 4 5]}

您也可以使用索引为一部分元胞赋值。例如,创建一个 1×5 元胞数组 D

D = cell(1,5)
D=1×5 cell array
    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}

此语法为 D 的前三个元胞赋值,其余元胞保留为空。

[D{1:3}] = deal(A1,A2,A3)
D=1×5 cell array
    {[100]}    {["foo"]}    {[1 2 3 4 5]}    {0x0 double}    {0x0 double}

首先创建一个包含一个字段的 1×3 结构体数组。

S.a = [];
S(2).a = [];
S(3).a = [];
S.a
ans =

     []


ans =

     []


ans =

     []

然后使用 deal 为字段赋值。语法 S.a 创建一个以逗号分隔的字段列表,每个字段对应结构体数组中的一个结构体。当调用 deal 时,您可以将此列表视为输出参量列表。

A1 = 100;
A2 = "foo";
A3 = 1:5;
[S.a] = deal(A1,A2,A3)
S=1×3 struct array with fields:
    a

S.a
ans = 100
ans = 
"foo"
ans = 1×5

     1     2     3     4     5

如果结构体数组不存在,则可以通过指定足够的索引以容纳所赋的值来创建它。您还可以使用索引为部分结构体的字段赋值。例如,如果 S 是 1×6 结构体数组,以下语法会为前三个结构体赋值。

[S(1:3).a] = deal(A1,A2,A3)
S=1×3 struct array with fields:
    a

S.a
ans = 100
ans = 
"foo"
ans = 1×5

     1     2     3     4     5

只要函数包含一条可执行语句,您即可创建一个匿名函数来定义该函数,而不必创建程序文件。从匿名函数返回多个输出参量的一种方法是将 deal 函数作为单可执行语句进行调用。

使用 deal 函数创建一个匿名函数,该函数返回一个数字及其平方、立方和四次方。要存储该匿名函数,请为其指定一个函数句柄。

powers1234 = @(x) deal(x,x.^2,x.^3,x.^4)
powers1234 = function_handle with value:
    @(x)deal(x,x.^2,x.^3,x.^4)

调用 powers1234 并将其输出赋给变量。您必须对 deal 返回的所有输出进行赋值。

[X1,X2,X3,X4] = powers1234(2)
X1 = 2
X2 = 4
X3 = 8
X4 = 16

要丢弃不需要的输出,请使用 ~ 运算符。

[~,~,X3,X4] = powers1234(2)
X3 = 8
X4 = 16

输入参数

全部折叠

输入数组,其中 n 是输入的数目。

输出参量

全部折叠

输出数组,其中 n 是输出的数目。

提示

  • 要将元胞数组转换为结构体数组,或将结构体数组转换为元胞数组,请使用 cell2structstruct2cell 函数,而不是 deal

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出