Лучшие практики для идентификаторов сообщений MATLAB?

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

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

component:mnemonic

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

MATLAB:dispatcher:nameConflict

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


person jjkparker    schedule 24.06.2010    source источник


Ответы (2)


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

(className):(parentFunction):functionWhereErrorOccurs:descriptiveMnemonic

Компоненты:

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

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

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

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

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

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

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

person gnovice    schedule 24.06.2010
comment
Эй ... второй раз ты мне помог. - person JnBrymn; 08.03.2011
comment
@gnovice Вы используете полное имя класса с предшествующим пакетом? - person b3.; 15.04.2015
comment
@ b3. Тебе решать. Я, наверное, просто хотел бы сделать это как можно более конкретным. - person gnovice; 15.04.2015

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

person Yair Altman    schedule 24.06.2010