Переменные рабочей сессии-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? Есть еще предложения?

356   3  

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

    Ничего не найдено.