2016-07-20 3 views
-1

Ich habe einige Skripts in Matlab, die für eine lange Zeit in Ordnung ist. gestern scheint es, dass die Feldnamen einer Struktur Zugriff mit xxx.fields aufgehört zu arbeiten, ein vereinfachtes Beispiel-Code wird hier gezeigtMatlab-Skript .field-Funktion funktioniert nicht mehr

a.b.one = 1; 
a.b.two = 2; 
a.b.three = 3; 
all_fields = fieldnames(a.b); % This works 
all_fields = a.b.fields; % This used to work, it suddenly stopped working. 

Die Fehlermeldung ist ‚Referenz auf nicht existierendes Feld‚Felder‘.‘, während auf einigen Computern all_fields = a.b.fields; noch arbeiten.

Ich habe ein paar Maschinen mit verschiedenen Versionen von Matlab (von 2014a bis 2016a). Der Code lief vor einigen Tagen reibungslos und niemand hatte das Skript seit letztem Jahr geändert. Wir haben auch keine Updates/Patches manuell auf Matlab angewendet. Hat Matlab einige Auto-Update-Funktion?

Die Verwendung von filednames wird für uns funktionieren, aber es erfordert eine erhebliche Menge an unserer bestehenden Code-Basis neu zu schreiben.

Jede Hilfe wäre willkommen. Vielen Dank.

+0

Nun in Ihrer zweiten Aussage haben Sie Tippfehler Zugriff ** Felder ** ** anstelle von ** Felder, die ein Problem sein könnte. Aber abgesehen davon wäre es eine gute Idee, ein reproduzierbares Beispiel zu veröffentlichen. – mgilbert

+0

Danke für den Kommentar, ich habe mit einem Beispiel aktualisiert. – Joe

+1

Ihr Beispiel liefert diesen Fehler nicht, a.b.fields löst einen Fehler "Verweis auf nicht existierende Feldfelder" aus. Dies ist ein erwartetes Verhalten, da die Struktur "b" innerhalb der Struktur "a" kein Feld mit dem Namen "fields" aufweist. – mgilbert

Antwort

1

Hören wir auf, über dieses Problem zu sprechen, und es hat nichts mit MCVE zu tun. Mein Beispiel in der Frage ist ausreichend genug, um das Problem zu reproduzieren.

a.b.one = 1; 
a.b.two = 2; 
a.b.three = 3; 
all_fields = fieldnames(a.b); % This works 
all_fields = a.b.fields; % This used to work, it suddenly stopped working without upgrading Matlab 

Für die Linie a.b.fields;, die zum Teil aus Matlab Instanzen arbeiten, und manche nicht. Wenn all_fields = a.b.fields; für Sie arbeitet, dann sind Sie wahrscheinlich in Ordnung. Damit das Skript für alle funktioniert, müssen wir nur alle all_fields = a.b.fields; in all_fields = fieldnames(a.b); ändern und bestimmte Bedingungen hinzufügen.

Ich bin nur verwirrt, warum es auf einem Computer funktioniert, aber es funktioniert nicht auf anderen Computern. Wenn das Matlab-Engine-Zeug ist, dann schließen wir das Problem. Danke für Ihre Kommentare.