Socit Kruz
Socit Kruz

Reputation: 11

matlab always fail to validate using inputParser

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);

But When I use it in this way:

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

it always prompt error like:

argment 'width' failed validation isscalar.

This is wired because I didn't use width when I use this function.

Upvotes: 0

Views: 178

Answers (1)

Sam Roberts
Sam Roberts

Reputation: 24127

I think you probably want to use addParamValue instead of addOptional.

When using inputParser, you have required arguments, optional arguments, and parameter-value arguments. Required arguments come first. Optional arguments come next, and you have to supply them in order. Parameter-value arguments come last, in any order.

What's happening here is that because you've specified all your arguments as optional, it's trying to use the value seq_id for width, and it fails the validation isscalar. Set them all to addParamValue instead.

Upvotes: 2

Related Questions