[英]How can I make MATLAB to ignore a function?
我的問題是,即使有一個名為“ mu”的局部變量,當代碼運行命令時
SQRT(畝)
Matlab嘗試運行稱為mu的內部函數。
據我所知,這不是正常行為。 如何使Matlab在其內部函數上使用局部變量?
我計划使用部署工具來編譯此代碼,因此修改Matlab的內部函數文件是不合適的。 問題將出現在編譯版本中。
讓我詳細說明這個問題,
我的main.m文件調用function_a.m函數。 Function_a函數運行另一個名為常量的腳本。 Constants.m文件不是一個函數,而是一個腳本,它僅保留一些變量,因此在加載時,這些變量將填充工作區。 格式是
const1=3; const2=5; mu=2;
在function_a運行constant.m之后,它將嘗試使用mu值。 這是當matlab從其內部mu函數給出錯誤時。 這意味着Matlab不使用由contants.m創建的局部mu變量。
我在運行constant.m之后但在命令中使用mu之前使用調試器來停止代碼。 Mu實際上應該在工作空間中。 在調試模式下,如果我使用命令sqrt(mu),它將按預期工作。 但是,當我繼續運行時,在函數文件中寫入相同的命令時,Matlab出現錯誤,表明它正在嘗試使用內部函數。
我怎樣才能解決這個問題?
首先,沒有名為mu
內部函數,所以我不知道存在什么混亂。
之所以可能出現此問題,是因為您已將mu
用作函數,然后在Constants
腳本中將其用作變量,並且MATLAB的靜態代碼分析器感到困惑,因此首次將其用作函數。 如果您調用load
並嘗試將具有函數名稱的變量加載到當前工作空間中 ,則會遇到相同的問題。
但總的來說,為避免此類問題,應避免使用諸如Constants.m
類的腳本填充調用函數的工作區。 這是因為,如果調用函數的工作空間包含具有相同名稱的函數或變量,則最終會造成這種歧義。 更好的方法是使Constants
成為一個函數,並使其返回一個struct
,該struct
隨后可用於訪問常量
function S = Constants
S.const1 = 3;
S.const2 = 5;
S.mu = 2;
end
然后從調用函數中
constants = Constants();
% Use the constants
value = constants.const1 + constants.mu;
% Or assign them to "safe" variables that are specific to this calling function
my_mu = constants.mu;
這樣,來自Constants.m
mu
不必總是被稱為mu
,這會導致更健壯和可重用的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.