In order to set default values for variables, I find the start of my functions littered with
if nargin < 1 || isempty(x)
x = 1;
if nargin < 2 || isempty(y)
y = 3;
This is pretty ugly, so I've created a wrapper to prettify it. Honestly, it's so simple that I nearly didn't upload this, but it does make your functions cleaner. Now the above is transformed to
SetDefaultValue(1, 'x', 1);
SetDefaultValue(2, 'y', 3);
Note that there are other ways to set defaults. See
Richie Cotton (2020). Set default values (https://www.mathworks.com/matlabcentral/fileexchange/27056-set-default-values), MATLAB Central File Exchange. Retrieved .
Sorry, you still need to do the "evalin" trick
~evalin('caller', ['exist(''' argName ''', ''var'')']) || ...
@Marco, I ran into the same thing. I just modified the condition so that it tests for the variable's existence before trying to access it.
~exist(argName,'var') || ...
Added before the 'isempty(...' line
Thanks to the author for this useful function. I've used it with no problem with Matlab up to R2016a, with this release I get an error like this:
Error using evalin
Undefined function or variable 'a'.
Error in SetDefaultValue (line 19)
Error in pippo (line 4)
when executing a dummy function "pippo":
function [ c ] = pippo( a, b )
%PIPPO Summary of this function goes here
% Detailed explanation goes here
c = a*b;
How should I fix it to get it working with R2016a (and possibly back compatible)?
Thanks a lot,