2016-10-16 2 views
0

Ich habe eine Anzahl von Vektoren mit semantischen Bezeichnern (z.B. inputs = [...]). Ich möchte sie in ein Zell-Array setzen, damit ich über sie hinweg iterieren kann. Aber wenn ich versuche:MATLAB cellarray enthält keine Referenzen?

inputs(1).myfield = 2 % some arbitrary value 
mycellarray{1} = inputs 
inputs(1).myfield = 3 % some arbitrary value 
assert(mycellarray{1}(1).myfield == inputs(1).myfield) 
% => FAIL 

Das Zellenfeld sagt, dass {1} ein 1x5 MyObject array hält, aber anscheinend ist es nicht das gleiche Objekt wie inputs verweisen.

Wie kann ich mein Ziel erreichen? (Ich kann meine Vektoren nicht in eine Matrix einfügen, da die Vektoren nicht die gleiche Länge haben.)

+3

Matlab hat keine Referenzen, Dinge werden kopiert –

Antwort

0

Wie in Kommentar in Matlab Objekte nach Wert angegeben. Aber der folgende Trick kann in GNU Octave erfolgen (in Matlab Ich bin nicht sicher):

ref = @(name) @(index) evalin('caller',sprintf('%s(%d)',name,index)); 

inputs(1).myfield = 2; 
mycellarray{1} = ref('inputs'); 
inputs(1).myfield = 3; 
assert(mycellarray{1}(1).myfield == inputs(1).myfield) 

ref eine Funktion ist, die eine name bekommt und gibt einen Funktionsgriff, der eine index bekommt und bewerten den Ausdruck name(index)

Also wenn wir mycellarray{1} = ref('inputs'); schreiben, speichern wir einen Funktionshandle im Keller.

Dann, wenn wir schreiben mycellarray{1} die Funktion Handle @(index) evalin('caller',sprintf('%s(%d)',name,index)) zurückgegeben.

Wenn wir mycellarray{1}(1) schreiben, wird der Ausdruck inputs(1) ausgewertet und das Ergebnis zurückgegeben.

Wenn wir mycellarray{1}(1).myfield Feld schreiben myfield zurückgegeben (funktioniert nicht in Matlab)

Hinweis: mit dem obigen Verfahren kann nur Wert von myfield abgerufen werden, kann aber nicht zugeordnet werden.

+1

Neben der Tatsache, dass MATLAB Call-by-Wert ist, ist es erwähnenswert, noch eine Sache. In MATLAB gibt es keine Möglichkeit, den Speicherort als Variable zu speichern. Der Wert einer Variablen ist immer der Wert dessen, was in dieser Variablen gespeichert ist. – patrik

Verwandte Themen