2010-11-18 67 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

我也同意在這種情況下編寫函數會有所幫助。但是,如果您操作的是非常大的數據集,那麼您需要小心地將代碼編寫成不會在函數內創建多個變量副本的表單,否則可能會遇到內存不足問題。