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.
Ich würde die Funktion verLessThan
verwenden:
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% 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.
Sie können den MATLAB-Befehl version
für Ihren Test verwenden -
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.
Am besten verwenden Sie dazu den Befehl version
und parsen die Zeichenfolge entsprechend .
Sehen Sie sich die Ausgabe von R2014a an und stellen Sie Ihre Werte entsprechend ein.
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.
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.
Tags und Links matlab