【问题标题】:How to create a property for a List of objects in matlab如何在matlab中为对象列表创建属性
【发布时间】:2016-11-27 11:43:29
【问题描述】:

我在 MATLAB 中这样定义 Node 类:

classdef Node
   properties
    X;
    Y;
   end
end

我需要像这样定义一个HeadNode 类:

classdef HeadNode 
   properties
     X;
     Y;
     % list<Node> NodeList = new list<Node>(); (C# syntax)
   end
end

我还需要为这个属性使用Add 方法,像这样(C# 语法):

HeadNode HeadNode1 = new HeadNode();    
Node Node1 = new Node();
Node1.X = 1;
Node1.Y = 2;
HeadNode1.Nodes.Add(Node1); 

如果有人可以解释如何在 matlab 中为对象列表创建属性并为此定义 Add 方法,将会非常有帮助?

谢谢。

【问题讨论】:

    标签: matlab list class properties


    【解决方案1】:

    Matlab 没有像列表这样的数据结构,因此一般的方法是将对象存储在数组中。首先,从句柄继承两个类:

    classdef Node < handle
        properties
            x
            y
        end
    end
    

    使用empty()方法将HeadNodenodes属性初始化为一个空的Node数组,这是所有非抽象Matlab类的隐藏方法。在构造函数中而不是在属性定义块中执行这种初始化很重要,否则HeadNode 的所有实例将reference the same location in memory

    classdef HeadNode < handle
        properties
            x
            y
            nodes
        end
    
        methods
            function obj = HeadNode()
                obj.nodes = Node.empty();
            end
        end
    end
    

    这样你可以例如将node1 添加到nodes 数组的末尾:

    node1 = Node();
    node1.x = 1;
    node1.y = 2;
    headNode1 = HeadNode();
    headNode1.nodes(end+1) = node1;
    

    另一种方法是使用 java 列表,但这种方式仅限于存储一些原始类型和 Java 对象,即您将无法在 java 列表中存储 Matlab 对象。

    【讨论】:

    • 想一想……我误读了这个问题,说他想创建一个传统的 c 样式列表(即包含指向下一个成员的指针)。如果没有 handle 类,他的要求完全可行。
    • 如果你问我,那是一个非常奇怪的结构。我不得不怀疑 OP 是否误解/歪曲了他被要求解决的问题。
    • 感谢您回答我的问题。我使用的是数组而不是列表。
    猜你喜欢
    • 2014-10-17
    • 1970-01-01
    • 2020-09-13
    • 2017-02-13
    • 1970-01-01
    • 2012-11-25
    • 2019-08-08
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多