【问题标题】:Worksession Variables - MATLAB工作会话变量 - MATLAB
【发布时间】:2013-05-31 08:09:34
【问题描述】:

我正在编写一系列通过urlread 与服务器通信的 MATLAB 函数。此包中进行此调用的每个函数都需要验证 usernamekey

我宁愿不要求用户在调用每个函数时传入usernamekey。相反,我更喜欢有一个signin(username, key) 函数来设置/保存这些变量,以便这个包中的每个函数都可以调用。

我现在的解决方案是让signin.musernamekey 保存到一个临时文件并修改finish.m 以在MATLAB 关闭时擦除这个临时文件。包中的每个函数都会从该临时文件中加载这些变量。但是,如果有人强行退出 MATLAB,这个临时文件不会被删除(对吗?)。

另一个解决方案是让signinusernamekey 保存为全局变量。但是,如果用户调用clear all,这些变量将被删除工作区,用户将需要再次调用signin(这很麻烦)。

有没有办法设置全局的“会话”变量,并且不会被clear all 命令删除?还有其他建议吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以考虑使用 MATLAB 的首选项功能。它适用于 setpref、addpref、rmpref 和 getpref 函数。我在一些应用程序中使用了这些工具,它们运行良好。

    一个小问题是您是否会经常调用这些工具。由于 getpref 使用从磁盘文件中读取来访问首选项,因此它并没有它可能的那么快。因此,如果由于频繁调用而必须具有绝对最大速度,那么持久变量的混合似乎对我来说效果很好。因此,我有一个用于访问相关首选项的函数。它包含持久变量中的首选项。如果这是第一次查询首选项,那么该持久变量将为空,因此我调用 getpref 来填充它。 (这是一个很好的功能,因为 pref 将在 MATLAB 会话中持续存在。)当您需要更改变量时,也请执行 setpref。

    【讨论】:

    • 酷,我不知道这个。是否/可以在会话结束/开始时自动重置首选项?
    • 你可以将任何你想要的东西放入startup.m,所以是的,你可以在那里做你想做的事。就此而言,还有一个 finish.m 会在 MATLAB 退出时自动调用。 (我从未使用过,但支持 finish.m。)或者,如果您使用我提出的包含持久变量的函数的范例,该函数也使用首选项,则在会话开始时第一次调用该工具,然后将首选项设置为默认值。
    【解决方案2】:

    你快到了。一些有用的功能:

    持久

    首先,您应该使用persistent 变量而不是global 变量。它们就像全局变量,但仅限于单个函数。他们只是更好。

    mlock

    在函数中运行 mlock 以防止 clearclear 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;
    

    【讨论】:

      【解决方案3】:

      另一种选择是官方的startup.m 文件和相关的Startup Folder。这些几乎可以用来做任何事情,包括提供的其他解决方案。

      【讨论】:

        猜你喜欢
        • 2014-04-10
        • 2017-09-20
        • 2015-06-29
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 2013-05-04
        • 1970-01-01
        相关资源
        最近更新 更多