2016-05-19 7 views
2

Ich arbeite mit jemand anderem Code in MATLAB und es sieht so aus, als ob er Strukturen erstellt, indem er Feldnamen verwendet, ohne sie zu deklarieren. So funktioniert es in MATLAB, fangen Sie einfach an, die Groß- und Kleinschreibung Ihrer Feldnamen zu beachten.Warum müssen Felder von Strukturen vor der Zuweisung nicht definiert werden?

So zum Beispiel, er so etwas wie dieses hat:

classdef Emitter 
    properties 
     transients=[]; 
    end 
end 

... some other class 
    methods 
     function sound=makeSound() 
     emitterthing.transients.receivedIntensity = 100 
     emitterthing.transients.frequency = 500 
     end 
    end 

Mit anderen Worten, er beginnt nur Feldnamen bilden und Werte zu ihnen zuweisen, ohne die Feldnamen zu erklären oder ihre Art.

Funktioniert das in MATLAB?

Antwort

3

Ja, Feldnamen are dynamic in MATLAB and can be added or removed at any time.

%// Construct struct with two fields 
S = struct('one', {1}, 'two', {2}); 

%// Dynamically add field 
S.three = 3; 

%// Remove a field 
S = rmfield(S, 'two') 

Die einzige Einschränkung ist, dass wenn Sie einen Array von Strukturen, die alle sie die gleichen Feldnamen haben müssen.

%// Create an array of structures 
S(1).one = '1.1'; 
s(2).one = '1.2'; 

%// Dynamically add a new field to only one of the structs in the array 
s(1).two = '2.1'; 

%// s(2) automatically gets a "two" field initialized to an empty value 
disp(s(2)) 

%//  one: '1.2' 
%//  two: [] 

Auch verwendet MATLAB dynamische Typisierung, so gibt es keine Notwendigkeit, die Art einer Variablen oder die Felder eines struct vor der Zeit zu definieren.

0

Sie müssen unterscheiden zwischen structs, die nur eine bequeme Möglichkeit zum Speichern von Daten sind (Funktionalität abgedeckt durch suever's answer) und instances of classes. Eine Struktur ist auch eine Instanz einer Klasse, aber alle Eigenschaften sind dynamische Eigenschaften von Design und Sie müssen sich nicht darum kümmern. Das ist nicht immer der Fall.

Wenn Sie zum Beispiel eine Gui von Grund auf mit einer Menge Gui-Elemente innerhalb einer Figur erstellen, müssen Sie viele Eigenschaften und Werte zwischen den Gui-Elementen herumreichen. Auf etwas haben alle Elemente die Figur gemeinsam, in der sie sich befinden. Es ist Griff, der Griff der gegenwärtigen Abbildung, eine Instanz der Zahlklasse, kann durch gcf in jeder Rückruffunktion des GUI leicht erhalten werden. Es wäre also praktisch, dieses Handle zu verwenden, um alle Informationen innerhalb der GUI zu übergeben.

Aber man kann nicht einfach tun:

h = figure(1); 
h.myData = 42; 

weil die Figur Klasse die dynamic propertymyData nicht bietet - man muss define it:

h = figure(1); 
addprop(h,'myData'); 
h.myData = 42; 

Ich hoffe, der Unterschied ist jetzt klar.