HOWTO · MATLAB

如何在 MATLAB 中檢查變數型別

了解如何使用 class()、whos、isa()、ischar() 與 isnumeric() 檢查 MATLAB 變數的類別或型別條件。

本頁內容

在 MATLAB 中,若要取得值的類別名稱,可以使用 class();若要查看目前工作區中的變數,則可使用 whos。若要判斷值是否符合特定條件,可使用 isa()、ischar() 或 isnumeric() 等述詞函式,取得邏輯結果。請依需求選擇方法:辨識單一值、檢視工作區變數,或讓程式依條件執行不同分支。

使用 MATLAB 中的 class() 函式檢查變數的型別

class() 函式會傳回一個字元向量,指出值所屬的類別。例如,MATLAB 會將數值常值 42 視為 double,而單引號括住的文字 'Hello, MATLAB!' 則是類別為 char 的字元陣列。下列與 Octave 相容的指令碼,將型別檢查與述詞判斷放在同一個流程中。

numericVar = 42;
charVar = 'Hello, MATLAB!';

fprintf('numericVar class: %s\n', class(numericVar));
fprintf('charVar class: %s\n', class(charVar));
fprintf('numericVar is double: %d\n', isa(numericVar, 'double'));
fprintf('charVar is a character array: %d\n', ischar(charVar));
fprintf('numericVar is numeric: %d\n', isnumeric(numericVar));

if isa(numericVar, 'double')
    fprintf('Process numericVar as a double.\n');
end
numericVar class: double
charVar class: char
numericVar is double: 1
charVar is a character array: 1
numericVar is numeric: 1
Process numericVar as a double.

若要取得某個值實際的類別名稱,請使用 class(value)。這個呼叫只會回報單一值,不會列出整個工作區的變數。

使用 MATLAB 中的 whos 命令檢查變數的型別

whos 命令會彙整目前工作區中的變數資訊,包括名稱、大小、位元組數、類別與屬性。輸入 whos 可查看工作區清單;輸入 whos numericVar 則可檢視指定變數。清單中的類別欄有助於一併檢查多個值。whos 只能查看目前工作區或作用範圍內可見的變數,因此無法檢查尚未指定給變數的任意運算式。若要查詢單一值,請使用 class(expression)。

在 MATLAB 中使用 isa() 測試特定型別

當程式需要判斷某個值是否屬於指定類別時,可使用 isa(value, 'typeName')。若 numericVar = 42 且 charVar = 'Hello, MATLAB!',則 isa(numericVar, 'double') 和 isa(charVar, 'char') 會傳回邏輯真值,而 isa(numericVar, 'single') 會傳回假值。這個結果可以直接用來控制 if 陳述式,如上方指令碼所示。isa() 也會辨識 MATLAB 類別之間的繼承關係,因此即使指定的名稱不是該值的確切類別,只要它是超類別或介面,結果仍可能為真。若要取得值本身的類別名稱,請改用 class(value)。

在 MATLAB 中檢查字元陣列:ischar()

ischar() 函式會傳回邏輯值,指出輸入是否為字元陣列。若 charVar = 'Hello, MATLAB!',ischar(charVar) 會傳回真;ischar(42) 則會傳回假。當函式需要字元陣列輸入時,可用 if ischar(value) 選擇文字處理方式。以雙引號括住的 MATLAB 字串陣列是另一種型別,不會通過這項字元陣列檢查。若程式同時接受字元向量與字串值,了解這項差異會很有幫助。

在 MATLAB 中使用 isnumeric() 檢查數值

使用 isnumeric(value) 可判斷值是否屬於數值型別。以上述範例而言,isnumeric(numericVar) 會傳回真,而 isnumeric(charVar) 會傳回假。這個述詞涵蓋 double、single 與整數類別等 MATLAB 數值類別,但不表示通過檢查的值一定是 double。依此述詞判斷時,邏輯值不屬於數值。若需要特定類別,請使用 isa(value, 'double') 測試,或以 class(value) 檢視確切名稱。

結論

使用 class() 取得單一值的類別名稱,使用 whos 檢視目前工作區中的變數,並使用 isa()、ischar() 或 isnumeric() 為程式取得邏輯條件。這些工具回答的問題不同:以 class() 或 whos 檢視資訊,再依程式需要執行的檢查選擇合適的述詞。