Я действительно наслаждаюсь Код и asp.netPRO... Visual Studio так себе.
Обычно я просто определяю переменную с помощью UPPER_CASE и помещаю ее в начало файла. Но вы должны ответственно относиться к тому, чтобы не изменять его значение.
В противном случае вы можете использовать классы MATLAB для определения именованных констант.
В Matlab теперь есть константы. Новый (R2008a +) стиль "classdef" ООП Matlab позволяет вам определять свойства константных классов. Это, вероятно, лучший вариант, если вам не требуется обратная совместимость со старыми Matlabs. (Или, наоборот, это хорошая причина отказаться от обратной совместимости.)
Определите их в классе.
classdef MyConstants
properties (Constant = true)
SECONDS_PER_HOUR = 60*60;
DISTANCE_TO_MOON_KM = 384403;
end
end
Затем укажите на них ссылку из любого другого кода, используя точечную квалификацию.
>> disp(MyConstants.SECONDS_PER_HOUR)
3600
См. Документацию Matlab для "Object" -Oriented Programming »в« Руководстве пользователя »для получения всех подробностей.
Есть пара незначительных ошибок. Если код случайно пытается записать в константу, вместо получения ошибки он создает локальную структуру, маскирующую класс констант.
>> MyConstants.SECONDS_PER_HOUR
ans =
3600
>> MyConstants.SECONDS_PER_HOUR = 42
MyConstants =
SECONDS_PER_HOUR: 42
>> whos
Name Size Bytes Class Attributes
MyConstants 1x1 132 struct
ans 1x1 8 double
Но ущерб локальный. И если хочешь быть внимательным, вы можете защитить от него, вызвав конструктор MyConstants () в начале функции, который заставит Matlab проанализировать его как имя класса в этой области. (IMHO, это перебор, но он есть, если вы этого хотите.)
function broken_constant_use
MyConstants(); % "import" to protect assignment
MyConstants.SECONDS_PER_HOUR = 42 % this bug is a syntax error now
Другая проблема заключается в том, что свойства и методы classdef, особенно такие статики, работают медленно. На моей машине чтение этой константы примерно в 100 раз медленнее, чем вызов простой функции (22 мкс против 0,2 мкс, см. этот вопрос ). Если вы используете константу внутри цикла, скопируйте ее в локальную переменную перед входом в цикл. Если по какой-то причине вы должны использовать прямой доступ к константам, используйте простую функцию, которая возвращает значение.
Ради вашего здравого смысла держитесь подальше от препроцессора.
Вы могли бы ответить на некоторые из этих ответов Как мне создать нумерованные типы в MATLAB? полезно. Но вкратце, нет "однострочного" способа указания переменных, значение которых не должно изменяться после начальной установки в MATLAB.
Как бы вы это ни делали, это все равно будет своего рода кладжем. В прошлых проектах мой подход к этому заключался в том, чтобы определить все константы как глобальные переменные в одном файле сценария, вызвать сценарий в начале выполнения программы для инициализации переменных и включить "global MYCONST;" операторы в начале любой функции, которая должна использовать MYCONST. Превосходит ли этот подход «официальный» способ определения функции, возвращающей постоянное значение, - вопрос мнения, с которым можно было бы поспорить в любом случае. Ни один из способов не идеален.