How to partially validate arguments?
4 views (last 30 days)
Rewriting some legacy code to arguments block style I run into cases where I should validate some arguments and pass the rest as is to other functions. This is about what I would like to accomplish:
function f1(positional, optional_positional, options, varargin)
optional_positional = 0;
% options validated by f1
options.f1_option = true;
% arguments without validation, to be validated by f2
% Doing things with validated arguments goes here.
% Eventually passing the non-validated arguments to another function.
Above leads to an error:
Function argument definition error in f1. Functions with positional and name-value arguments must define positional arguments first.
So it would seem what I'm trying to do isn't exactly supported. Did I make a mistake somewhere? Is there another way of doing it?
Edit: What I'm after is very similar to inputParser KeppUnmatched option: Input parser for functions - MATLAB - MathWorks Nordic
Bruno Luong on 21 Mar 2022
Edited: Bruno Luong on 21 Mar 2022
I believe the issue is that your argument isn't self consistent.
When you use syntax such as
optional_positional = 1
That means you can call the function with single argument
MATLAB won't be able to know what is the varargin, it is started from 4th input argument, or 2th argument, 3rd argument?
You simply cannot at tell MATLAB some function arguments has default value when they are not passed, and at the same time still have varargin. It is not problem of not supporting, it's rather a logical of which argument corresponds to which that is ambigeous.