Переменные рабочей сессии-MATLAB
Я пишу серию функций MATLAB, которые взаимодействуют с сервером через urlread. Каждая функция в этом пакете, которая делает этот вызов, требует аутентификации username и key.
Я бы предпочел не требовать, чтобы пользователь передавал username и key при вызове каждой функции. Вместо этого я предпочитаю иметь функцию signin(username, key), которая устанавливает/сохраняет эти переменные таким образом, чтобы каждая функция в этом пакете могла вспомнить.
Мое решение прямо сейчас для signin.m, чтобы сохранить username и key во временный файл и изменить finish.m, чтобы удалить этот временный файл, когда MATLAB закроется. Каждая функция в пакете будет загружать эти переменные из этого временного файла. Однако, если кто-то принудительно покинет MATLAB, этот временный файл не будет удален (верно?).
Другое решение состояло в том, чтобы
signin сохранить username и key в качестве глобальных переменных. Однако, если пользователь вызывает clear all, эти переменные будут удалены из рабочей области, и пользователю нужно будет снова вызвать signin (что является помехой).Есть ли какой-то способ установить переменные сеанса, которые являются глобальными и не удаляются командой clear all? Есть еще предложения?
3 ответов:
Ты почти на месте. Несколько полезных функций:
Стойкий
Во-первых, вы должны использовать переменныеpersistent, а не переменныеglobal. Они похожи на глобалы, но ограничены одной функцией. Они просто лучше.Mlock
Запустите
mlockвнутри функции, чтобы командаclearилиclear allне удаляла данные, связанные с этой функцией.
Так, например, вы можете определить быструю функцию для помощи имени пользователя и ключ в сеансе Matlab выглядит следующим образом:
function [name, key] = credentials(varargin) persistent USERNAME KEY if nargin==3 && ischar(varargin{1}) && strcmpi(varargin{1},'set') USERNAME = varargin{2}; KEY= varargin{3}; mlock; else name = USERNAME; key = KEY; endТогда вы можете использовать его следующим образом:
%First, set the credentials credentials set SOMEUSERNAME SOMEKEY % .... do some work .... clear %As part of your work, clear all variables % .... do some more work .... %Get the credentials later [name, key] = credentials;
Вы можете рассмотреть функцию предпочтений MATLAB. Он работает с функциями setpref, addpref, rmpref и getpref. Я использую эти инструменты в нескольких приложениях, и они прекрасно работают.
Одна небольшая проблема заключается в том, что вы будете часто вызывать эти инструменты. Поскольку getpref использует чтение из файла диска для доступа к префиксам, это не так быстро, как могло бы быть. Так что если вы должны иметь абсолютную максимальную скорость из-за частых вызовов, то смесь постоянных переменных, кажется, работает хорошо для меня. Таким образом, у меня есть функция, которую я использую для доступа к рассматриваемому предпочтению. Он содержит преф в постоянной переменной. Если это первый раз, когда pref запрашивается, то эта постоянная переменная будет пустой, поэтому я делаю вызов getpref, чтобы заполнить ее. (Это хорошая функция, так как преф будет сохраняться в сеансах MATLAB.) Когда вам нужно изменить переменную, сделайте setpref тоже.
Другой альтернативой является официальная
startup.mфайл и связанная с ним папка запуска . Они могут быть использованы для решения практически любых задач, включая другие предлагаемые решения.
Comments