2016-07-23 163 views
1

我定义Node类像这样在MATLAB:如何创建一个属性的对象在MATLAB列表

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方法,这将是非常有帮助的?

谢谢。

回答

1

Matlab没有像列表那样的数据结构,所以一般的方法是将对象存储在一个数组中。

classdef Node < handle 
    properties 
     x 
     y 
    end 
end 

初始化nodesHeadNode属性来使用empty()方法,这是所有非抽象Matlab的类的隐藏方法的空Node阵列:首先,从手柄继承这两个类。在构造函数中,而不是在属性定义块来执行这样的初始化是很重要的,否则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 

这种方式可以如添加node1nodes数组的末尾:

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

另一种方法是使用Java的名单,但这样一来,你只限于存储一些基本类型和Java对象,即你将不能够存储一个Matlab在java列表中的对象。

+0

开始想起它......我误解了这个问题,他说他想创建一个传统的c样式列表(即包含指向下一个成员的指针)。他所要求的是没有'handle'类的完全可行的。 –

+0

虽然这是一个非常奇怪的结构,如果你问我。我不得不怀疑OP是否误解/歪曲了他被要求解决的问题。 –

+0

谢谢你回答我的问题。我使用了一个数组而不是一个列表。 –

相关问题