2010-06-24 7 views
13

Beim Erstellen einer MATLAB-Ausnahme (MException-Objekt) oder beim Drucken einer Warnung oder Fehlermeldung können Sie in MATLAB eine Nachrichten-ID angeben, die die Ausnahme definiert, die Sie werfen.Best Practices für MATLAB-Nachrichten-IDs?

Die Message-ID ist im Format:

component:mnemonic 

Zum Beispiel MATLAB eigene undefinierten Variable Message-ID ist:

MATLAB:dispatcher:nameConflict 

Also, wenn Sie Ausnahmen in Ihrem eigenen Code verwenden, was Sie tut für eine Nachrichten-ID verwenden? Verwenden Sie die Standardeinstellungen von MATLAB erneut? Make your own? Was verwendest du für die Komponente und mnemonic Zeichenfolgen?

Antwort

11

ich folgen in der Regel dieses Muster für Fehler (oder Warnung) message identifiers, wo die Dinge in Klammern kann oder nicht vorhanden sein können:

(className):(parentFunction):functionWhereErrorOccurs:descriptiveMnemonic 

Die Komponenten sind:

  • className: Der Name der Klasse, wenn die Funktion, in der der Fehler auftritt, eine Methode/Konstruktor ist.

  • parentFunction: Wenn die Funktion in dem der Fehler ein subfunction in an m-file oder ein nested function ist auftritt, wäre dies die primary m-file function oder der Elternteil der verschachtelten Funktion sein, respectively. Sie könnten daher mehrere parentFunction Komponenten haben.

  • functionWhereErrorOccurs: Der Name dieser Komponente ist ziemlich selbsterklärend. ;)

  • descriptiveMnemonic: Ich betone deskriptiv. Zum Beispiel inputError sagt mir wirklich nichts, aber notEnoughInputs macht deutlich, dass ich nicht genug Argumente übergeben habe. Ich benutze immer einen niedrigeren Kamelfall für die Gedächtnisstütze, wo der erste Buchstabe eines Wortes außer dem allerersten Wort großgeschrieben wird.

Die className und parentFunction Komponenten könnten etwas redundant betrachtet werden, da die stack property der MException class bereits einen vollständigen Pfad zu der m-Datei und die Zeilennummer des Fehlermutter identifiziert. Einer der Zwecke einer message identifier ist jedoch, dass Sie eindeutig einen Fehler für andere Zwecke als nur die Suche nach der Quelle des Fehlers identifizieren können.

Nehmen wir an, Sie haben eine Funktion myFcn und eine Klasse myClass, die myFcn überlädt. Wenn Sie eine Fehlernachricht-ID für die erste Adresse myFcn:maxIterationsReached und eine Fehlernachricht-ID für die zweite myClass:myFcn:maxIterationsReached eingeben, können Sie beispielsweise einen Haltepunkt mit DBSTOP festlegen, der die Ausführung nur anhält, wenn dieser Fehler von myClass\myFcn erzeugt wird und nicht myFcn. Ebenso sind eindeutige Warnung Nachrichtenbezeichner nützlich, dass Sie speziell ignore warnings von spezifischen Funktionen wählen können während andere angezeigt werden.

Zusätzlich könnten Sie auch Komponenten in den Bezeichner einfügen, die anzeigen, dass die Funktion, in der der Fehler auftritt, in einem package folder oder einem private folder liegt (dies könnte jedoch zu einer ziemlich langen Kennung führen).

+0

Hey ... das zweite Mal hast du mir geholfen. – JnBrymn

+0

@gnovice Verwenden Sie den vollständig qualifizierten Klassennamen, mit dem Paket voraus? –

+0

@ b3. Es liegt an dir. Ich würde es wahrscheinlich nur so spezifisch wie möglich machen. – gnovice

3

In meiner Arbeit verwende ich YMA: (mainFunctionName) :(descriptionMnemonic), wo YMA einfach meine Initialen sind. Zum Beispiel haben alle Warnungen und Fehler, die in meinem UIInspect utility aufgerufen werden, ähnliche IDs wie YMA:uiinspect:XXX.