2015-11-10 32 views
0
function res = display_grid(root_dir, output_dir,varargin) 

ip = inputParser; 
ip.addRequired('root_dir', @isstr); 
ip.addRequired('output_dir', @isstr); 
ip.addOptional('width', 160 , @isscalar); 
ip.addOptional('height', 120, @isscalar); 
ip.addOptional('ext', 'jpg', @isstr); 
ip.addOptional('num_x', 5, @isscalar); 
ip.addOptional('num_y', 4, @isscalar); 
ip.addOptional('interval', 5 , @isscalar); 
ip.addOptional('int_pix_value', 128, @isscalar); 
ip.addOptional('seq_id', '0', @isstr); 

驗證,但是當我以這種方式使用它:MATLAB總是失敗使用inputParser

display_grid('./dataset', './inpection', 'seq_id', '10'); 

它總是提示錯誤,如:

argment 'width' failed validation isscalar. 

這是有線的,因爲我沒有使用此功能時使用寬度。

+1

此代碼不完整,不會重現問題。請發佈重現問題的完整(但最少)的代碼。 – zelanix

回答

2

我想你可能想使用addParamValue,而不是addOptional

使用inputParser時,您需要參數,可選參數和參數值參數。首先需要的參數。接下來是可選參數,您必須按順序提供它們。參數值參數以任意順序排在最後。

這裏發生的事情是,因爲您已將所有參數指定爲可選參數,所以它試圖使用寬度值seq_id,並且驗證失敗isscalar。相反,將它們全部設置爲addParamValue

+1

請注意,近期版本的Matlab已棄用['addParamValue'](http://www.mathworks.com/help/matlab/ref/inputparser.addparamvalue.html),贊成['addParameter'](http:// www.mathworks.com/help/matlab/ref/inputparser.addparameter.html)。 – TroyHaskin

+0

@TroyHaskin要明確一點:在R2013b之前,唯一的方法叫做'addParamValue'。在R2013b中,引入了addParameter方法,並且不再推薦使用addParamValue(這只是一個名稱更改,它的作用相同)。在將來的一些版本中,'addParamValue'可能會被棄用。但是它尚未被棄用(截至目前的R2015b版本),並且適用於所有最新版本。但是你是對的,因爲如果你有最近的版本,你應該嘗試使用'addParameter'而不是'addParamValue',除非你需要向後兼容。 –

+0

這與'addoptional'的現有MathWorks文檔不一致:'addOptional(p,argName,default,validationFcn)'所以最需要'argName'。你還可以在你的函數中使用這個值嗎? –