函式接收圖形或軸物件物件作為引數。我想對此進行測驗,如FIXME行中所示。這里應該使用哪個測驗來允許所有有效物件exportgraphics?
% myexportgraphics.m
function myexportgraphics(f)
arguments
f (1,1) {}; % FIXME add a test here
end
exportgraphics(f,...);
end
uj5u.com熱心網友回復:
此驗證函式的完整串列記錄在此處:
https://uk.mathworks.com/help/matlab/matlab_prog/argument-validation-functions.html
檢查輸入型別的唯一相關的(除了特定型別,如“雙”)是mustBeUnderlyingType
underlyingType您可以使用要接受的示例物件來檢查哪些型別是有效的。
underlyingType( figure() ); % 'matlab.ui.Figure'
underlyingType( axes() ); % 'matlab.graphics.axis.Axes'
所以這將檢查數字
function myexportgraphics(f)
arguments
f (1,1) {mustBeUnderlyingType(f,'matlab.ui.Figure')};
end
end
但是,這不允許多種變數型別,因此根據檔案,您可能想要制作自己的驗證功能
function myexportgraphics(f)
arguments
f (1,1) {mustBeExportGraphicsType(f)};
end
end
function mustBeExportGraphicsType(g)
if ~ismember( class(g), {'matlab.ui.Figure','matlab.graphics.axis.Axes'} )
eidType = 'mustBeExportGraphicsType:notExportGraphicsType';
msgType = 'Input must be a figure or axes object';
throwAsCaller(MException(eidType,msgType));
end
end
這些是自定義驗證功能的要求,強調我的:
用于驗證的函式具有以下設計元素:
- 驗證函式不回傳輸出或修改程式狀態。唯一的目的是檢查輸入值的有效性。
- 驗證函式必須接受被驗證的值作為輸入引數。如果函式接受多個輸入引數,則第一個輸入是要驗證的值。
- 驗證函式僅依賴于輸入。該函式沒有其他值可用。
- 如果驗證失敗,驗證函式會拋出錯誤。使用 throwAsCaller 拋出例外可以避免在顯示的錯誤訊息中顯示驗證函式本身。
當您想要提供使用 MATLAB 驗證函式無法提供的特定驗證時,創建自己的驗證函式非常有用。您可以在函式檔案中創建一個驗證函式作為本地函式,或將其放在 MATLAB 路徑中。
順便說一句,您可以ishghandle在自定義驗證函式中使用,該函式為圖形和軸輸入回傳 true。如果您不使用arguments驗證語法,則可以改用ishghandle稍舊inputParser的輸入驗證方法,或者assert在函式開頭附近使用簡單的方法,但這可能超出了這個問題的范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505845.html
上一篇:基于索引的替換
