So erhalten Sie statische member-Variablen im MATLAB-Klassen?
Gibt es eine Möglichkeit zu definieren, statische member-Variablen im MATLAB-Klassen?
Dies nicht funktioniert:
classdef A
properties ( Static )
m = 0;
end
end
Es empfiehlt Stichwort "Konstante" statt "Statische", die Konstante Eigenschaften können nicht geändert werden. Ich möchte eine variable gemeinsam ist allen Objekten der Klasse A
und ich möchte in der Lage sein, ändern Sie die variable in Methoden der Klasse A
.
Also was ich brauche ist eine private statische member-Variablen. Gibt es eine Möglichkeit, es zu erhalten in MATLAB?
Fand heraus, dass eine Abhilfe getan werden kann, Verwendung von persistenten Variablen in statische member-Funktionen.
In diesem Fall sollten Sie Erben alle Klassen von einer Basisklasse wie folgt.
classdef object < handle
properties ( GetAccess = 'public', SetAccess = 'private' )
id
end
methods ( Access = 'protected' )
function obj = object()
obj.id = object.increment();
end
end
methods ( Static, Access = 'private' )
function result = increment()
persistent stamp;
if isempty( stamp )
stamp = 0;
end
stamp = stamp + uint32(1);
result = stamp;
end
end
end
Ja, ich erhielt einen workaround mit persistenten variable in einer statischen member-Funktion.
Sie sollten poste es als Antwort für andere Interessierte in dieser Frage
persistent
nicht zugeordnet werden, getrennt für die Unterklassen obwohlInformationsquelleAutor Vahagn | 2011-06-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht, es ist by design. Sollten Sie eine
persistent
variable (Technik aus der MATLAB-1980 angewendet, die im Jahr 2011)!Vollständigkeit halber sollte ich erwähnen, dass es tatsächlich, wie von 2010b eine undokumentierte und wahrscheinlich nicht mehr unterstützt
static
Eigenschaft modifier.Hintergrund sehen hier die Antwort von Dave Foti, MATLAB OO group manager:
InformationsquelleAutor Mikhail
Hier ist ein direkter Weg, um eine statische Eigenschaft in Matlab. Der einzige Unterschied zwischen dieser Implementierung und einem hypothetischen (aber unmöglich ist; siehe Michail Antwort) rein statische Eigenschaft ist die syntax für die Einstellung der member-Variablen.
Nun die statische Eigenschaft staticVar können gelesen werden über:
...und über:
So, zum Beispiel, das ist das erwartete Ergebnis von einem test dieser Funktionalität:
Dieser Ansatz funktioniert genauso gut für den privaten statischen Eigenschaften wie von Ihnen gewünscht, haben aber den demo-code ist ein wenig länger. Beachten Sie, dass dies nicht eine handle-Klasse (wenn es perfekt funktionieren würde gut auf eine handle-Klasse).
...und der test:
InformationsquelleAutor Ben
(nur informieren)
es ist (anderen?) Möglichkeit zum erstellen von statisch-Daten in matlab
angenommen, Sie haben ein "handle" - Klasse, sein name ist "Auto"
wenn Sie möchten, dass die Auto-Klasse, um statische Daten, die Sie bauen könnten, die eine andere handle-Klasse und verwenden Sie es in der Auto-Klasse werfen Zusammensetzung, die letztere Klasse funktioniert als statische Daten für Auto-Klasse
diese Weise, wenn Sie, erstellen Sie zuerst eine Instanz eines Auto-Klasse, die eine Instanz STATIC_DATA_HOLDER erstellt werden und, wenn Sie erstellen Sie eine zweite Instanz der Klasse Auto es nutzt die zuvor erstellt STATIC_DATA_HOLDER Klasse.
diesen code getestet mit "MATLAB 2013b"
InformationsquelleAutor Hadi
Eine andere Lösung um so etwas wie statische Eigenschaften, ist die Tatsache, dass die Initialisierung code für member-Variablen wird nur einmal ausgeführt, wenn die Klasse-Datei geladen wird. Das bedeutet, dass, wenn Sie eine definition wie
dann
some_function
ist aufgerufen, nur einmal, und wenn es gibt ein Objekt der Klasse Typ, dieser wird geteilt durch alle Instanzen. Ich habe eine Beispiel-Implementierung, die zeigt, wie verwendet werden können:Wenn Sie den Beispielcode ausführen
werden Sie sehen, dass
classvars
ist in der Tat geteilt. Ich glaube, diese Lösung ist viel schöner als die Verwendung von persistenten Variablen in Funktionen, da Sie wiederverwenden könnenStaticVarContainer
so oft wie Sie wollen, es ist einfacher zu verwenden, und außerdem, Sie direkt in die Initialisierung der statischen Variablen im Abschnitt "Eigenschaften".Um das Ergebnis zu erhalten, das gewünscht wird, in den OP ' s Frage (D. H. die Implementierung einer Objekt-Zähler) die gemeinsame Eigenschaft gemacht werden können
Constant
, so dass auf Sie verwiesen werden kann, ohne eine Instanz auf der hand:Beachten Sie, dass die
Constant
Attribut bedeutet nur, dass, z.B.obj1.static
kann nicht geändert werden, aber es hat keinen Einfluss aufobj1.static.counter
ist nicht konstant, und kann die Sehnsucht des Herzens.InformationsquelleAutor Elmar Zander