Main Content

deal

説明

メモ

ほとんどの場合、関数 deal は必要ありません。cell 配列および構造体フィールドの内容にアクセスする場合は、次の構文に示すように、代わりに配列インデックス付けとコンマ区切りリストを使用します。

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

詳細については、コンマ区切りリストを参照してください。

ただし、通常は単一の出力を返す演算から複数の出力が必要な場合は、deal が役立つ場合がいくつかあります。たとえば、deal を使用して、次を実行できます。

  • cell 配列の複数の cell に値を代入する。

  • 非スカラー構造体配列のフィールドに値を代入する。

  • 無名関数から複数の出力を返す。

[B1,...,Bn] = deal(A1,...,An) は入力引数 A1,...,An をコピーし、それらを出力引数 B1,...,Bn として返します。これは、B1 = A1, …, Bn = An と同じです。この構文では、入力引数と出力引数の数は同じでなければなりません。

[B1,...,Bn] = deal(A) は単一の入力引数 A をコピーし、出力引数 B1,...,Bn として返します。これは、B1 = A, …, Bn = A と同じです。この構文では、任意の数の出力引数を指定できます。

すべて折りたたむ

cell が空の 1 行 3 列の cell 配列を作成します。

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

3 つの変数を作成します。deal を使用して、それぞれの値を C の cell に代入します。構文 C{:} は、中かっこを使用して内容にアクセスできる cell のコンマ区切りリストを作成します。このリストは 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]}

インデックスを使用して cell のサブセットに値を代入することもできます。たとえば、1 行 5 列の cell 配列 D を作成します。

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

この構文は値を D の最初の 3 つの cell に代入し、残りの cell を空のままにします。

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

最初に、1 つのフィールドをもつ 1 行 3 列の構造体配列を作成します。

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

     []


ans =

     []


ans =

     []

次に、deal を使用して値をフィールドに代入します。構文 S.a は、構造体配列の各構造体に 1 つずつ、フィールドのコンマ区切りリストを作成します。このリストは 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 列の構造体配列である場合、次の構文は最初の 3 つの構造体に値を代入します。

[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

関数に 1 つの実行可能ステートメントが含まれている限り、プログラム ファイルを作成せずに関数を定義する "無名" 関数を作成できます。複数の出力引数を無名関数から返す 1 つの方法は、その 1 つの実行可能ステートメントとして関数 deal を呼び出すことです。

関数 deal を使用して、数値およびその 2 乗、3 乗、4 乗を返す無名関数を作成します。無名関数を保存するには、それを関数ハンドルに割り当てます。

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 は出力の数です。

ヒント

  • cell 配列を構造体配列に変換するか、構造体配列を cell 配列に変換するには、deal ではなく、関数 cell2structstruct2cell を使用します。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入