How to set an optional function input as a first input?

17 vues (au cours des 30 derniers jours)
Jennifer Taylor
Jennifer Taylor le 11 Sep 2015
Commenté : Cedric le 12 Sep 2015
I am trying to make a function with syntax similar to plot(ax, ...), where the handle to an axis can be included before the required inputs, but is optional. Such as:
function add2plot(ax, x, y, varargin)
Everything I have found forces the required inputs to be first, including inputParser and manual parsing of varargin. So how does plot() do it?? I am using ver. 2013b, where the handle is a double, and thus hard to distinguish from my numerical x input. The addition of varargin makes using nargin complicated.
Any input is appreciated!

Réponse acceptée

Cedric
Cedric le 11 Sep 2015
Modifié(e) : Cedric le 11 Sep 2015
You can pass whatever you want to the parser; it doesn't get automatically what is passed to the function, but works on what you pass to its parse method. You have therefore the freedom to do something like:
function foo( varargin )
% - Extract first optional axes handle. Remove if present.
if ~isempty( varargin ) && ishandle( varargin{1} )
ax = varargin{1} ;
varargin = varargin(2:end) ;
else
ax = [] ;
end
% - Build input parser and parse remaining args.
parser = inputParser ;
parser.StructExpand = true ;
parser.CaseSensitive = false ;
parser.addRequired( .. ) ;
.. etc.
parser.parse( varargin{:} ) ; % Pass only remaining args.
args = parser.Results ;
% - ...
end
  4 commentaires
Walter Roberson
Walter Roberson le 11 Sep 2015
From R2014b onwards it is better to use http://www.mathworks.com/help/matlab/ref/isgraphics.html
Cedric
Cedric le 12 Sep 2015
Thank you Walter, I had missed this information. It makes me realize that I should make a synthesis of all releases information since .. a long time ago, and scan/update/refactor a lot of projects!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Argument Definitions dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by