簡體   English   中英

如何使MATLAB忽略函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM