2

を介してサーバーと通信する一連の MATLAB 関数を作成していますurlread。この呼び出しを行うこのパッケージ内の各関数には、認証usernamekey.

すべての関数を呼び出すときに、ユーザーがusernameandを渡す必要はありません。key代わりに、signin(username, key)このパッケージ内の各関数がリコールできるように、これらの変数を設定/保存する関数を使用することを好みます。

現在の私の解決策は、一時ファイルsignin.mに保存usernameして、 MATLAB を閉じるときにこの一時ファイルを消去keyするように変更することです。finish.mパッケージ内の各関数は、その一時ファイルからこれらの変数をロードします。ただし、誰かが MATLAB を強制終了した場合、この一時ファイルは消去されません (そうですよね?)。

別の解決策は、グローバル変数として保存することでしたsignin。ただし、ユーザーが を呼び出すと、これらの変数はワークスペースから削除され、ユーザーは再度呼び出す必要があります (これは面倒です)。usernamekeyclear allsignin

clear allグローバルで、コマンドで削除されない「セッション」変数を設定する方法はありますか? 他の提案はありますか?

4

3 に答える 3

4

あなたはほとんどそこにいます。いくつかの便利な機能:

持続的に

persistentまず、変数ではなく変数を使用する必要がありglobalます。それらはグローバルに似ていますが、単一の関数にスコープされています。彼らはただ優れています。

ムロック

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;
于 2013-05-30T23:00:30.293 に答える