工作会话变量-MATLAB
我正在编写一系列MATLAB函数,这些函数通过工作会话变量-MATLAB,matlab,Matlab,我正在编写一系列MATLAB函数,这些函数通过urlread与服务器通信。此包中进行此调用的每个函数都需要身份验证用户名和密钥 我不希望在调用每个函数时要求用户传入用户名和键。相反,我更喜欢使用sign(username,key)函数来设置/保存这些变量,这样包中的每个函数都可以调用 我现在的解决方案是signin.m将username和key保存到一个临时文件中,并在MATLAB关闭时修改finish.m以删除此临时文件。包中的每个函数都将从该临时文件加载这些变量。但是,如果有人强制退出MAT
urlread
与服务器通信。此包中进行此调用的每个函数都需要身份验证用户名
和密钥
我不希望在调用每个函数时要求用户传入用户名
和键
。相反,我更喜欢使用sign(username,key)
函数来设置/保存这些变量,这样包中的每个函数都可以调用
我现在的解决方案是signin.m
将username
和key
保存到一个临时文件中,并在MATLAB关闭时修改finish.m
以删除此临时文件。包中的每个函数都将从该临时文件加载这些变量。但是,如果有人强制退出MATLAB,这个临时文件将不会被删除(对吗?)
另一个解决方案是将登录
保存用户名
和键
作为全局变量。但是,如果用户调用清除所有
,这些变量将从工作区中删除,用户将需要再次调用登录
(这是一个麻烦)
是否有某种方法可以设置全局的“会话”变量,并且不使用
清除所有命令删除这些变量?还有其他建议吗?你就快到了。一些有用的功能:
持久性
首先,您应该使用持久
变量,而不是全局
变量。它们类似于全局函数,但只限于单个函数。他们只是更好
mlock
在函数内运行mlock
,以防止clear
或clear all
命令清除与该函数相关的数据
例如,您可以定义一个快速函数来帮助Matlab会话B中的用户名和键,如下所示:
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,因此它的速度不如可能的快。因此,如果由于频繁调用,您必须具有绝对最大速度,那么持久变量的混合似乎对我很有效。因此,我有一个函数,我使用它来访问所讨论的偏好。它在持久变量中包含pref。如果这是第一次查询pref,那么该持久变量将为空,因此我执行一个getpref调用来填充它。(这是一个很好的功能,因为pref将在整个MATLAB会话中保持不变。)当您需要更改变量时,也可以执行setpref。另一种选择是官方文件和相关文件。它们几乎可以用来做任何事情,包括提供的其他解决方案。酷,我不知道这一点。会话结束/开始时是否可以自动重置首选项?您可以将任何需要的内容放入startup.m,因此,是的,您可以在那里执行任何需要的操作。就这点而言,还有一个finish.m,当MATLAB退出时会自动调用。(我从未使用过,但支持finish.m。)或者,如果您使用我提出的范例,即一个包含也使用pref的持久变量的函数,那么在会话开始时第一次调用该工具时,只需将pref设置为默认值即可。