1. 對于可選位置參數(shù) (addOptional) 和可選參數(shù) (addParameter) 共同存在的情形, 仍不能正確的解析, 示例在原來的例子中加入 addRequired 如下:
function findArea(varargin)
p = inputParser;
p = addRequired(p, 'width', @(x) isnummeric(x) && isscalar(x) && (x > 0));
p = addOptional(p, 'height', 1);
p = addParameter(p, 'units', 'm');
p = addParameter(p, 'shape', 'square');
p = parse(p, varargin{:});
width = p.Results.width
height = p.Results.height
units = p.Results.units
shape = p.Results.shape
endfindArea(2, 3, "units", "cm") 現(xiàn)在可以正確解析了. 但是如果可選位置參數(shù)輸入不足時, 如 findArea(2, "units", "cm") 就不能正常解析了.
在 inputParser 類的代碼第 152 行定義的當(dāng)前參數(shù)位置指針 pos = 1, 有一個必須參數(shù)和一個可選位置參數(shù), pos 經(jīng)過兩次加一得到 pos = 3, 此時解析參數(shù)的時候, 剩余可選參數(shù)為 varargin(3:end) = "cm", "units" 雖然沒有像之前的版本被賦值給 "height", 但也被吞掉消失. 只剩下 "units" 不是成對出現(xiàn)導(dǎo)致解析可選參數(shù)出錯.
2. 在添加參數(shù)的時候, checkArgs(list, value, validator) 函數(shù)是通過 ismember 函數(shù)來判斷是否存在該參數(shù)名的.
ismember 只能判斷字符元胞數(shù)組, 那么在添加參數(shù)的時候只能使用字符數(shù)組, 如上面的示例 p = addOptional(p, 'width', 1); 原本使用的字符串在使用的時候就全部報錯.
這個問題只需要在 inputParser 中添加幾個 char 全部轉(zhuǎn)化成字符數(shù)組即可, 而不用關(guān)心用戶輸入的是字符還是字符串.
分別是 addParameter 函數(shù) 101, 102 行 paramName 外面添加 char(), addOptional 函數(shù) 112, 113 行 paramName 外面添加 char(), addRequired 函數(shù) 123 行添加 char().
