1

私はMatlabを使い始めたばかりで、型システム(またはその欠如)を完全に軽蔑しています(または正しく理解していません)。

これが機能しないのはなぜですか? 構造体内の構造体が必要なだけです(再帰関数内)

    K>> d = struct('op',1,'kids',[])

    d = 

          op: 1
        kids: []

    K>> d.kids(1) = struct('op',2)
    Conversion to double from struct is not possible.

を作るなど、他のことも試しd=struct('op',1,'kids', struct([]))ましたが、何もうまくいかないようです....

4

3 に答える 3

8

でインデックスを作成すると(1)、構造体を の最初の要素に割り当てようとしていますがd.kids、これは既にdouble配列であるため、型が一致しません。フィールド全体に割り当てるだけです。

d.kids = struct('op', 2);

struct最初に構造体で初期化するには、これを実行し、渡す代わりに引数なしで呼び出し[]ます。

d = struct('op',1, 'kids',struct());

まだ絶望と憎しみに負けないで。型システムは、ここで必要なものを処理できます。基本的な構文ミスを犯しているだけです。doc()オンライン ヘルプ ( Matlab 内から呼び出す) またはMathWorks の Web サイトにある MATLAB 入門ガイド、特に「行列と配列」および「プログラミング」セクションをよく読んでください。

于 2012-02-01T16:00:28.457 に答える
1

2番目のコマンドにインデックスは必要ありません。

d.kids = struct('op',2) 

初期値[]によって、フィールドが配列になることはありません。

編集:アンドリューの答えはより明確です。不明な場合は、コマンドclassを使用して式のタイプについてMatlabに問い合わせることができます。

于 2012-02-01T16:03:02.920 に答える
1

より短い方法でそれを行うこともできます:

d.op = 1;
d.kids.op = 2;
于 2012-02-01T18:26:09.913 に答える