【问题标题】:Securing a workspace variable保护工作区变量
【发布时间】:2010-11-18 07:51:55
【问题描述】:

也许您已经克服了以下情况。您正在工作并且开始一个接一个地运行脚本,然后突然意识到您已经更改了您感兴趣的变量的值。除了备份工作区之外,没有其他方法可以保护变量吗?

有没有办法在工作区中选择要保护的单个变量?

除了查看命令历史寄存器之外,是否有一个历史寄存器记录了已赋予一个特定变量的不同值?

【问题讨论】:

    标签: security variables matlab history workspace


    【解决方案1】:

    按顺序运行脚本是灾难的根源。如果可能,请尝试将这些脚本转换为函数。这自然会消除覆盖您遇到的变量的问题,因为函数内部的变量对于这些函数来说是本地的,而脚本中的变量对于工作区来说是本地的——因此很容易被单独的脚本访问/覆盖(通常是无意的,尤其是如果你使用像“结果”这样的变量名)。

    【讨论】:

    • +1。绝对要学习编写函数而不是脚本。这使您的代码更灵活,对未来更有用。
    • +1。技术上的挑剔:脚本中的变量也是本地的;它们只是“基础”工作区的本地,它在 Matlab 会话的整个生命周期内都存在,并且所有脚本都在其中运行。全局变量使用“全局”关键字声明,可以从任何声明它们的工作区访问。
    • 所以你是在告诉我,一个优秀的 Matlab 程序员所做的一切都是通过函数完成的?如果每次我想做某事时,我都必须创建一个不会变得更乏味和更不灵活的函数?
    • RE:彼得斯通的评论 - 不,我不是这个意思。有时脚本比函数更合适。但是,如果您遇到了 OP 提到的问题,这意味着您所做的任何事情都可能最好用函数来完成。
    【解决方案2】:

    我也同意在这种情况下编写函数会有所帮助。但是,如果您要处理非常大的数据集,那么您需要小心以一种不会在函数中复制多个变量的形式编写代码,否则您可能会遇到内存不足的问题。

    【讨论】:

      【解决方案3】:

      不,没有工作区历史记录。我想说,如果你遇到你描述的那个问题,你应该考虑改变你的编程风格。

      我建议你:

      1. 在您的脚本中放入这么多代码或信息,这样您就可以从一个空的工作区开始完成一项任务。出于这个原因,我总是将clear all 放在我的主文件的开头。

      2. 如果它变得过于复杂,请考虑调用函数。如果您需要由另一个脚本或函数生成的值,请将该脚本重写为一个函数并在您的主文件中调用它或保存变量。加载变量绝对没问题。但是按顺序运行脚本会导致灾难为mentioned by marciovm

      【讨论】:

        猜你喜欢
        • 2016-11-05
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        相关资源
        最近更新 更多