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.

我尝试了其他东西,比如 make 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());

不要屈服于绝望和仇恨。类型系统可以在这里处理你想要的;你只是在犯基本的语法错误。阅读 MATLAB 入门指南,尤其是在线帮助(doc()从 Matlab 中调用)或MathWorks 网站中的“矩阵和数组”和“编程”部分。

于 2012-02-01T16:00:28.457 回答
1

您的第二个命令不需要索引。

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 回答