2011-07-27 110 views
5

我想創建一個函數function ExtremePoints = AnalyseData(ScanData)Matlab - 使用工作區變量

我希望能夠在不傳遞參數ScanData的情況下運行該函數,並且在這種情況下,我想使用Matlab Workspace中的同名變量。

這是可能的,在函數體內使用出現在工作區中的變量ScanData?

或者我應該首先將變量ScanData的內容從工作區保存到.mat文件中,然後在該函數的主體中加載該文件?

+3

由於@Edric已經提到:(強烈)不鼓勵這樣做,因爲您將無法在沒有太多痛苦的情況下在其他地方正確地重用該函數(缺少變量,存儲在'ScanData'中的東西完全不同,代碼,mlint不會在'eval'或'evalin'內發出警告,......)。所以,當你不需要的時候,請自己幫忙,不要使用它們! – Egon

+0

問題是,所提到的函數更多地用作測試腳本,而不是從命令窗口啓動調用,我想直接從編輯器調用函數,這就是提出這個問題的原因。感謝您的建議,但! :) – Simon

+1

你可以做一些不同的事情。首先你可以把它變成一個腳本而不是一個函數(只是省略'function ...')。所有變量將成爲基礎工作空間的一部分。因此,這可能會變得混亂,你可能需要玩弄諸如「明確的變量;關閉所有; clc;'爲了方便。或者你可以使用[運行配置](http://www.mathworks.cn/help/techdoc/matlab_env/brqxeeu-131.html#brqxeeu-136)功能。但是,這些在版本控制或不同計算機上跟蹤很麻煩。所以兩者都有優點和缺點。 – Egon

回答

11

這可能,也許不完全推薦。具體方法如下:

function ExtremePoints = AnalyseData(ScanData) 
if nargin == 0 
    ScanData = evalin('base', 'ScanData'); 
end 
% do stuff 

這從base工作空間拉的ScanData的值,如果沒有輸入提供參數(nargin == 0)。

使用evalevalin通常是不鼓勵的,因爲它會讓您的代碼更難以理解和重用。

相關問題