Лучшие практики для идентификаторов сообщений MATLAB? - PullRequest
14 голосов
/ 24 июня 2010

При создании исключения MATLAB (объект MException) или печати предупреждения или сообщения об ошибке MATLAB позволяет указать идентификатор сообщения, который определяет исключение, которое вы выдает.

Идентификатор сообщения в формате:

component:mnemonic

Например, собственный неопределенный идентификатор сообщения переменной MATLAB:

MATLAB:dispatcher:nameConflict

Итак, когда вы используете исключения в своем собственном коде, что вы используете для идентификатора сообщения? Вы повторно используете стандартные MATLAB? Придумай свое? Что вы используете для компонентных и мнемонических строк?

Ответы [ 2 ]

12 голосов
/ 24 июня 2010

Я обычно следую этому шаблону для ошибок (или предупреждений) идентификаторы сообщений , где вещи в скобках могут присутствовать или не присутствовать:

(className):(parentFunction):functionWhereErrorOccurs:descriptiveMnemonic

Компоненты:

  • className: имя класса, если функция, в которой происходит ошибка, является методом / конструктором.

  • parentFunction: Если функция, в которой происходит ошибка, является подфункцией в m-файле или вложенной функцией , это будет primary Функция m-файла или родительская функция для вложенной функции соответственно. Поэтому у вас может быть несколько parentFunction компонентов.

  • functionWhereErrorOccurs: название этого компонента не требует пояснений. ;)

  • descriptiveMnemonic: подчеркиваю описательный . Например, inputError ничего мне не говорит, но notEnoughInputs дает понять, что я не передал достаточно аргументов. Я всегда использую нижний регистр верблюдов для мнемоники, где первая буква слова пишется с большой буквы, кроме самого первого слова.

Компоненты className и parentFunction можно считать несколько избыточными, поскольку свойство 1046 * класса MException уже идентифицирует полный путь к родительскому m-файлу и номер строки ошибки. Однако одна из целей идентификатора сообщения заключается в том, что он позволяет однозначно идентифицировать ошибку для целей, отличных от простого поиска источника ошибки.

Допустим, у вас есть функция myFcn и класс myClass, который перегружает myFcn. Если вы сделаете идентификатор сообщения об ошибке для первого из них myFcn:maxIterationsReached, а идентификатор сообщения об ошибке для второго - myClass:myFcn:maxIterationsReached, это позволит вам, например, установить точку останова с помощью DBSTOP , которая останавливает выполнение только тогда, когда эта ошибка вызвана myClass\myFcn, а не myFcn. Кроме того, уникальные предупреждения идентификаторы сообщений полезны тем, что вы можете специально выбрать игнорировать предупреждения из определенных функций, позволяя отображать другие.

Кроме того, вы также можете включить компоненты в идентификатор, указывающий, что функция, в которой возникает ошибка, находится в папке пакета или личной папке (но это может привести к довольно длинный идентификатор).

3 голосов
/ 24 июня 2010

В своей работе я использую YMA: (mainFunctionName) :( descriptiveMnemonic), где YMA - это просто мои инициалы. Например, все предупреждения и ошибки, вызванные в моей UIInspect утилите , имеют идентификаторы, подобные YMA:uiinspect:XXX.

...