2010-11-18 80 views
1

也许您已经过了以下情况。你正在工作,你开始一个接一个地运行一个脚本,然后突然意识到你已经改变了你感兴趣的变量的值。除了对工作区进行备份之外,是否没有其他方法来保护变量?确保工作区变量的安全

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

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

回答

9

按顺序运行脚本是灾难的秘诀。如果可能,请尝试将这些脚本转换为函数。这将自然消除覆盖你正在运行的变量的问题,因为函数内部的变量对于这些函数是本地的,而脚本中的变量对于工作空间是本地的 - 因此易于被单独的脚本访问/覆盖(通常是无意的,尤其是如果你使用像“result”这样的变量名)。

+1

+1。肯定学会编写函数而不是脚本。这使您的代码更加灵活,对未来更有用。 – 2010-11-18 12:12:20

+2

+1。技术挑剔:脚本中的变量也是本地的;它们只是“基本”工作空间的本地位置,它持续了Matlab会话的生命周期,并且所有脚本都在其中运行。全局变量用“全局”关键字声明,并且可以从声明它们的任何工作空间访问。 – 2010-11-18 16:41:07

+0

所以你告诉我,在Matlab中一个好的程序员所做的一切都是通过函数完成的? 如果每次我想做点什么,我都要做一个不会更乏味,更不灵活的功能? – Peterstone 2010-11-19 04:16:53

0

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

我会建议你:

  1. 把那在你的脚本太多的代码或信息,这样你就可以从一个空的工作区开始履行任务。出于这个原因,我总是把clear all放在我的主文件的开头。

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

0

我也同意在这种情况下编写函数会有所帮助。但是,如果您操作的是非常大的数据集,那么您需要小心地将代码编写成不会在函数内创建多个变量副本的表单,否则可能会遇到内存不足问题。