[英]Can a Matlab Function create a global variable?
我正在使用 Octave(或 Matlab...我都有可用的),並嘗試制作一個 function 來設置我在整個 rest 的調查中使用的重要變量
但是默認情況下,在 function 中聲明的變量只有 function 的有限 scope。
有沒有辦法做到這一點?
function defineBasicTerms()
global G = 9.807;
global F = [exp(1) 0; 0 1/exp(1)];
endfunction
這樣在調用此 function 之后,變量G
和F
存在於全局命名變量集中嗎?
全局變量需要在使用它們的每個 scope 中聲明。 例如,如果您有一個 function M 文件defineBasicTerms.m
包含:
function defineBasicTerms
global G = 9.807;
end
然后在基本工作區中,您可以編寫:
defineBasicTerms
G % produces error: variable doesn't exist
global G
G % gives 9.807
接下來,在將使用常量G
的 function 中:
function out = computeSomethingImportant(m)
global G
out = G * m;
end
也就是說,每次我們想使用G
時,我們都需要執行global G
來訪問全局變量G
。
請注意,這是一個非常危險的情況。 有兩件事可以 go 錯誤:
一些 function 分配給全局變量G
,更改當前 session 的 rest 的值。 真的很難知道這是否發生了,但是computeSomethingImportant
將從此時開始返回錯誤的值,直到我們再次調用defineBasicTerms
。
我們在defineBasicTerms
期間調用 defineBasicTerms 之前調用computeSomethingImportant
。
MATLAB(以及 Octave 中的擴展)中建立的定義常量的方法是通過 function。 可以編寫函數以始終返回相同的值(MATLAB 沒有其他方法可以將變量聲明為常量),並且函數在所有工作區和所有上下文中自動可用(當然,只要 function 在路徑上)。
在您的示例中,我們將編寫一個 M 文件 function Gm
包含:
function value = G
value = 9.807;
end
現在,在基礎工作區中:
G % gives 9.807
使用常數G
的 function 現在看起來就像這樣:
function out = computeSomethingImportant(m)
out = G * m;
end
請注意,諸如pi
之類的常量在 MATLAB 和 Octave 中以這種方式定義。
您必須為要聲明的每個常量編寫一個 function M 文件。 有一種替代方法涉及到 class 和 static 值,以便可以在單個文件中定義所有常量。 然而,語法會變得不同,需要使用constants.G
或類似的東西來訪問內容值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.