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

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

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

component:mnemonic

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

MATLAB:dispatcher:nameConflict

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

Ответы

Ответ 1

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

(className):(parentFunction):functionWhereErrorOccurs:descriptiveMnemonic

Компоненты:

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

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

  • functionWhereErrorOccurs: Название этого компонента довольно понятно.;)

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

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

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

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

Ответ 2

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