Wie testet man auf eine MATLAB-Version der letzten Zeit?

9

Eine Funktion, die ich implementieren möchte, muss wissen, ob die aktuelle Version von MATLAB mindestens so aktuell ist wie R2014a .

Gibt es eine robuste, unterstützte Möglichkeit, diese Überprüfung durchzuführen?

(Mit "robust, unterstützt" Ich möchte sagen, dass ich mich nicht für fragile Hacks interessiere, wie das Parsen der von der Version zurückgegebenen Zeichenfolge, etc.)

BTW, in diesem Fall ist der Grund, warum ich diese Überprüfung möchte, dass ich die Funktion matlab.lang.makeUniqueStrings verwenden kann. Wenn es eine robuste, unterstützte Möglichkeit gäbe, nach der Verfügbarkeit dieser Funktion zu suchen, würde ich sie verwenden, anstatt zu testen, ob das aktuelle MATLAB neu genug ist. Leider scheint es keine solche Überprüfung zu geben: exist gibt false für jede Variante zurück, die ich für den Namen dieser Funktion verwenden kann. Auch hier kann ich an zerbrechliche Hacks denken, um einen richtigen Test nachzuahmen (z. B. which('matlab.lang.makeUniqueStrings') ), aber sie sind kaum besser als die oben erwähnten Versionstest-Hacks.

Die beste Lösung, die ich gefunden habe, ist, den Befehl mit matlab.lang.makeUniqueStrings innerhalb eines try-catch Blocks auszuführen. Dies ist immer noch ein zerbrechlicher Hack, weil MATLAB keine robuste, integrierte Möglichkeit bietet, bestimmte Ausnahmen abzufangen!

IOW, es geht darum, den am wenigsten schrecklichen Hack zu wählen. Das Testen, ob die aktuelle Version aktuell genug ist (selbst wenn dieser Test ein zerbrechlicher Hack ist), hat zumindest den Vorteil, dass sie allgemein genug ist, um in irgendeiner Funktion zu bleiben und zumindest die Verbreitung von zerbrechlichem, hacky Code zu enthalten.

    
kjo 26.03.2014, 13:36
quelle

6 Antworten

17

Ich würde die Funktion verLessThan verwenden:

%Vor%

Dies wird wahr (1) zurückgeben, wenn die aktuelle Version, die Sie verwenden, älter als 8.3 (R2014a) und falsch (0) ist. Kein String-Parsing erforderlich.

Sie könnten es dann wie folgt verwenden:

%Vor%     
gnovice 26.03.2014, 13:43
quelle
7

Wenn Sie sich nur um relativ neue Versionen kümmern müssen, verwenden Sie den Befehl verLessThan . % Co_de% wurde jedoch in etwa 2006a oder so eingeführt; Wenn Sie ältere Versionen unterstützen müssen, müssen Sie die Ausgabe des Befehls verLessThan verwenden.

Alternativ können Sie auch die Existenz von version robust testen. Verwenden Sie zuerst matlab.lang.makeUniqueStrings , um ein m = meta.package.fromName('matlab.lang') -Objekt abzurufen, das sich auf das Paket bezieht. Wenn meta.package leer ist, ist das Paket nicht vorhanden. Wenn m nicht leer ist, überprüfen Sie die Eigenschaft m von FunctionList , um festzustellen, ob m vorhanden ist. (Es gibt auch eine makeUniqueStrings -Eigenschaft).

Schließlich bietet MATLAB eine Möglichkeit, bestimmte Ausnahmen abzufangen. Verwenden Sie ClassList anstatt eines einfachen catch . Die Variable catch myError ist ein Objekt vom Typ myError , das im Block MException verfügbar ist. Sie können die Eigenschaften catch und identifier der Ausnahme testen und verschiedene Ausnahmen entsprechend behandeln, einschließlich der erneuten Verarbeitung nicht behandelter Ausnahmen.

    
Sam Roberts 26.03.2014 14:10
quelle
3

Sie können den MATLAB-Befehl version für Ihren Test verwenden -

%Vor%

Beispiellauf -

%Vor%

Überprüfen Sie, ob Ihre MATLAB-Version die neueste ist (R2014a) -

%Vor%

Der obige Befehl würde 1 zurückgeben, wenn es sich um eine aktuelle Version handelt, andernfalls wird 0 zurückgegeben.

    
Divakar 26.03.2014 13:39
quelle
2

Am besten verwenden Sie dazu den Befehl version und parsen die Zeichenfolge entsprechend .

%Vor%

Sehen Sie sich die Ausgabe von R2014a an und stellen Sie Ihre Werte entsprechend ein.

    
PearsonArtPhoto 26.03.2014 13:38
quelle
2

Ein Beispiel dafür, was Sam meinte:

%Vor%

Robust, bis The MathWorks die ID-Zeichenfolge ändert.

Als letzte Bemerkung: Die Suche nach Features ist nicht ausreichend: Was passiert, wenn The MathWorks die Funktionssignatur ändert? Oder die Ausgabe-Argumentliste? Oder ..?

Es gibt keine wirklich robuste Methode in einer Sprache, die selbst nicht robust ist. Sei so robust wie es die Sprache erlaubt, aber nicht mehr.

    
Rody Oldenhuis 26.03.2014 17:26
quelle
0

Das Testen der Versionsnummer ist kaum eine gute Idee. Sie sollten immer nach Features suchen und niemals nach Versionen, wenn Sie wirklich Robustheit (und gleichzeitig Portabilität) wollen.

Was passiert, wenn eines der Features, die Sie benötigen, aus einer zukünftigen Version von Matlab entfernt wird? Oder wie es funktioniert? (Das ist viel häufiger als man erwarten würde). Oder wenn jemand Ihren Code in einem Matlab-kompatiblen System verwenden möchte, das die Funktionen hat, die Ihr Code benötigt?

Es gibt einige Autoconf-Makros, die mit Matlab verwandt sind (obwohl ich noch nie eines benutzt habe). Oder Sie können Ihre eigenen einfach in Matlab Sprache überprüfen.

    
carandraug 26.03.2014 15:43
quelle

Tags und Links