是否有可能在一個Matlab檔案中定義多個列舉?或者是否有可能像我們在檔案末尾定義區域功能一樣,擁有 "區域 "列舉?
我正在做一個專案,在這個專案中,擁有多個列舉類是很方便的,但是每次都使用classdeff是很煩人的,因為它需要一個單獨的檔案,而這意味著有很多短檔案的唯一目的是定義列舉類。目前,每個列舉看起來是這樣的:
classdef exampleEnumType < uint32
enumeration
zero(0)。
one(1)。
2(2)。
結束。
結束。
有沒有一種方法可以在Matlab中緊湊地定義列舉,這樣我就不需要為每個列舉單獨撰寫檔案(使用Matlab 2021a)?
uj5u.com熱心網友回復:
首先,有很多短檔案是MATLAB中的正常情況。繞過這個問題是可能的,但往往是徒勞的。
傳統上,在MATLAB中,常量值被定義為一個函式。例如,pi就是一個函式。它看起來像這樣:
function v = pi
v =3.14159
通過將常數變成一個函式,它可以從任何地方獲得,而不需要首先運行代碼來定義這些常數。
一個列舉只不過是一系列的常量。同樣的情況也可以通過結構體來實作:
exampleEnumType = struct('zero',0, 'one',1, 'two',2)。)
從最近(R2019b)開始,MATLAB允許在函式呼叫的輸出中進行點狀索引,但你確實需要在函式呼叫中使用空括號。因此,我們可以用與常量相同的方式來宣告上述結構:
function v = exampleEnumType
v = struct('zero',0, 'one', 1, '2',2)。)
這允許做exampleEnumType().zero(幾乎)像用列舉或用結構變數。
那么我們如何將其擴展到在一個檔案中定義多個這樣的檔案?如果一個共同的前綴沒有問題,我們可以定義一個帶有靜態成員函式的類,每一個都宣告一個常量:
classdef常量
methods(Static)
function v = pi
v = 3.14159[/span]。
end
function v = exampleEnumType
v = struct('zero',0, 'one', 1, '2',2)。
結束。
end; end
end end
我們現在有constants.pi和constants.exampleEnumType().zero。
另外,創建一個單一的函式來回傳一個更復雜的結構,如下所示:
function v = constants
v.pi = 3.14159。
v. exampleEnumType = struct('zero',0, 'one', 1, '2',2)。)
這樣我們就可以做到constants().exampleEnumType.zero。
請注意,對于R2019b之前的MATLAB版本,上述方法不會以同樣的方式作業。對于MATLAB的舊版本,最后一種方法(一個函式constants)將是最好的方法。用戶只需在任何需要使用常量的函式的頂部進行constants = constants;。這樣就可以用一個同名的變數來影射函式,這樣constants.exampleEnumType.zero就可以如期作業了。
uj5u.com熱心網友回復:
你可以使用一個地圖...
exampleEnum = containers. Map( {'zero','one','two'}, {0,1,2}. );
使用起來像
exampleEnum('zero') % = 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309712.html
標籤:
