我有一個有很多變數(10-30)的腳本,在一個for回圈中,我基本上用每個變數做一些處理。我有一個輔助腳本,以便使回圈的內部看起來很干凈。
主腳本
a=2; b=5; c=8;d=10;%and many many more。
for i=1: 1000
幫手。
end。
我想把helper變成一個函式,主要是因為這可以讓我把helper腳本(現在是一個函式)放在主檔案的底部。但是我絕對不希望單獨傳遞每一個變數,以及我在這個專案中尚未需要的每一個變數。
我真正需要的是一個函式。
我真正需要的是一個goto,但是matlab沒有這個功能。
uj5u.com熱心網友回復:
對此有很多解決方案。在rinkert的評論中,你已經得到了唯一一個良好的編碼實踐:把變數放在一個結構中,然后把結構傳給你的函式。我強烈建議你這樣做。使用嵌套函式也不是一個糟糕的解決方案,盡管它可能更難管理(嵌套函式中的變數可見性規則很有趣,我有時會覺得很困惑)。
在這里,我想說的是,如果你想讓變數在嵌套函式中的可見性更強,那么你就需要在嵌套函式中的可見性更強。
在這里,我將給你一個最糟糕的解決方案。evalin。你不應該這樣做,我把這個貼在這里只是為了教育目的。
evalin允許一個函式在呼叫者的作業區檢索一個變數:
a=2; b=5; c=8;d=10;%and many many more。
for i=1: 1000
幫手。
end
function helper
% NEVER DO THIS IN PRACTICE
a = evalin('caller'/span>,'a'/span>)。
b = evalin('caller','b') 。
c = evalin('caller','c') 。
d = evalin('caller','d') 。
% do computations....
assignin('caller','result', result)。
結束。
注意,一個函式result = helper(a,b,c,d)的效率要高得多,而且更容易維護,因為它清楚地說明了正在發生的事情。evalin會產生令人驚訝的結果,而assignin更是如此。不要使用這個.
這些函式有一些合法的用途。例如,我寫了一個GUI,允許MATLAB用戶更容易地訪問一組函式,但目的是與MATLAB的互動式命令提示符一起作業。GUI將從 "基礎 "作業區獲取變數,評估 "基礎 "作業區的函式呼叫,并向 "基礎 "作業區寫入新的變數。在GUI中運行一個函式,就像在命令提示符下運行它一樣。除了使用evalin和assignin之外,沒有其他方法可以完成這個任務。
uj5u.com熱心網友回復:
盡管這不是好的編碼行為,你可以使用global變數。 例如:
global a。
a= 5;
function out =test()
global a;
out=2*a;
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309705.html
標籤:
