Лучшая альтернатива глобальным переменным MATLAB
Я пишу приложение MATLAB, которое имеет множество функций, распространяемых по разным файлам. У меня есть журнал, который является структурой с указателем на функцию, и я использую его для записи информации, которую пользователь видит (то есть, какая функция в настоящее время выполняется, результаты расчета и т.д.). Причина, по которой я использую структуру для моего регистратора, а не просто fprintf()
, заключается в том, что я мог бы легко заменить ее в логгерах XML, в журнале HTML и т.д. В будущем.
Так как мой код состоит из множества функций, вызывающих друг друга, я объявлял свою структуру logger глобальной, поэтому мне не нужно передавать ее ко всем моим многочисленным функциям. Однако, везде, где я смотрю, я вижу, что глобальные переменные являются злыми воплощенными в MATLAB и значительно замедлят мою программу.
Есть ли способ иметь переменные, доступные в файлах, не обязательно передавая их в качестве входных параметров и не испытывая серьезного снижения производительности?
Ответы
Ответ 1
Вы также можете использовать ключевое слово постоянное внутри файла и размещать там регистратор.
В некоторых случаях это похоже на ключевое слово static в С++. Это также реализация шаблона Singleton.
function CallLogger(st)
persistent logger;
if isempty(logger)
%Allocate new logger
end
logger.disp(st);
end
Это лучше, чем глобальное, потому что
1. Никто не может уничтожить ваш регистратор без вашего ведома.
2. Никто не знает об этом объекте, поскольку он ограничен областью функций
Кстати, я не согласен с тем, что в глобальном масштабе проблема с производительностью. Это не очень хорошая практика с точки зрения Software Engineering.
Ответ 2
Лучше, чем вызывать постоянные переменные в функции (которая, например, не будет сохранена, если вы сохраните и затем перезагрузите рабочую область), нужно было перейти от функции + struct к объекту: то есть вы должны посмотреть в MATLAB объектно-ориентированное программирование.