在MatLab中定义类示例列表

gzjq41n4  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(259)

我将在MatLab中定义一个名为“Node”的类,它应该是树结构的一个节点。我在它里面有一个名为“NodeList”的变量,它应该是一个子节点列表。
以下是我的定义:

classdef Node
properties
    Title   string                  %name
    NodeType Type_Node              %enum Design/Variation
    NodeList    cell{Node}        %list of sub nodes
    RelationType    Relation        %enum AND/OR
    ImportanceFactor    float       %float [0  1]
    NodeIndex   {mustBePositive}    %int for drawing the tree
end
methods
    function obj=Node(title,nodetype,nodelist,relation,impactfactor,nodeindex)
        obj.Title=title;
        obj.NodeType=nodetype;
        obj.NodeList=nodelist;
        obj.RelationType=relation;
        obj.ImportanceFactor=impactfactor;
        obj.NodeIndex=nodeindex;
    end
end
end

在示例化类时,我收到以下错误消息:

Error setting default value of property 'NodeList' of class 'Node'. The 'Node' class 
definition uses an instance of itself directly
or indirectly as the default value for the 'NodeList' property. This is not allowed.

首先,请让我知道我用来定义类的语法是否正确。
然后,我会感激任何建议,以制作一个类的示例列表。
第三,我如何才能在类本身中嵌套一个示例列表?

shstlldc

shstlldc1#

将此作为下一步尝试。(为了方便起见,我简化了课程)

classdef Node < handle
properties
    Title      string     %name
    NodeList   Node       %list of sub nodes
end
properties (Constant = true)
    NullNode = Node();
end
methods
    function obj=Node(varargin)
        switch nargin
            case 2
                obj.Title=varargin{1};
                obj.NodeList=varargin{2};
            case 0
                obj.Title = '';
                obj.NodeList = obj;
        end
    end
end
end

现在,这些都起作用了:

nFirst     = Node()
nOther     = Node('name', nFirst )
nWithAList = Node('list', [nFirst, nOther])

我所做的更改:
1.NodeList验证器只针对Node类,而不是cell{Node}。这仍然允许类的标准数组。(如果需要,您可以对阵列单独设置大小限制。[1])
1.我添加了一个0参数构造函数,它是自引用的。(我也可以使用一个常量NullNode对象放入此处,这取决于项目中的意义。示例在代码中定义。)
1.我从handle派生了这个类。(这并不是回答您最初的问题所必需的。然而,根据样例代码的上下文,我怀疑这更接近您预期的行为。)
[1][https://www.mathworks.com/help/matlab/matlab_oop/defining-properties.html](https://www.mathworks.com/help/matlab/matlab_oop/defining-properties.html)(参见“属性验证语法”)

相关问题