2016-07-23 10 views
1

Ich definiere Node Klasse wie folgt in MATLAB erstellen:Wie eine Eigenschaft für eine Liste der Objekte in Matlab

classdef Node 
    properties 
    X; 
    Y; 
    end 
end 

ich eine HeadNode Klasse wie folgt definieren müssen:

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

ich auch müssen Add Methode für diese Eigenschaft wie folgt (C# Syntax):

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

Es wäre sehr hilfreich, wenn jemand erklären könnte, wie man eine Eigenschaft für eine Liste von Objekten in Matlab erstellt und die Add-Methode dafür definiert?

Danke.

Antwort

1

Matlab hat keine Datenstrukturen wie Listen, daher wäre ein allgemeiner Ansatz, Objekte in einem Array zu speichern. Erstens erben beide Klassen von Griff:

classdef Node < handle 
    properties 
     x 
     y 
    end 
end 

initialisieren nodes Eigenschaft HeadNode zu einem leeren Node Array mit empty()-Methode, die eine versteckte Methode aller nicht-abstrakten Matlab Klassen ist. Es ist wichtig, solche Initialisierung im Konstruktor und nicht in der Eigenschaft Definition Block durchzuführen, andernfalls alle Instanzen HeadNode würde 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 

Auf diese Weise können Sie zum Beispiel hinzufügen node1 bis Ende nodes Array:

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

Eine Alternative wäre Java-Listen zu verwenden, aber auf diese Weise einige primitive Typen und Java zu speichern Objekte beschränkt werden, dh Sie können nicht eine Matlab zu speichern wäre in der Lage Objekt in einer Java-Liste.

+0

kommen, um daran zu denken ... Ich habe die Frage falsch verstanden, als er sagte, er wollte eine traditionelle c-style Liste erstellen (d. H. Mit einem Zeiger auf das nächste Mitglied). Was er verlangt, ist ohne die 'handle' Klasse völlig machbar. –

+0

Das ist eine sehr merkwürdige Struktur, wenn Sie mich fragen. Ich muss mich fragen, ob OP das Problem, das er lösen sollte, falsch ausgelegt/falsch dargestellt hat. –

+0

Vielen Dank für die Beantwortung meiner Frage. Ich habe ein Array anstelle einer Liste verwendet. –

Verwandte Themen