Лучшая альтернатива глобальным переменным 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 объектно-ориентированное программирование.