Using inputname and varargin for dynamic variable creation (?)
11 ビュー (過去 30 日間)
古いコメントを表示
Despite my best programming habits, and in an effort to make my code more modular, I use a couple of places varargin.
Of course, the inputs can vary between each use and I check the names of the variables using inputname() and then load from a .mat file any variables that were not passed in but are needed for the code to run.
But now, I need to use the variables that were passed in that are currently lying in varargin{} -- and I need those variable names to be named with what is in inputname{:}...e.g inputname{1}=varargin{1}. I think I could do this with an eval(), but I know that is frowned upon.
I know that [var1, var2, var3]=varargin{:} would work, but the names i need the variables to be called are in inputnams(), and I can't think of how to get this to work.
Is there a good way to get the contents of varargin{} out and into named variables that then lay in the stack?
Thanks!
4 件のコメント
Jan
2011 年 2 月 1 日
If you need to access strings, use strings and do not mask them as names of variables.
採用された回答
Jiro Doke
2011 年 2 月 1 日
A couple of options that I can think of:
1. Use assignin. But as you may know, assignin would only allow you to assign to the caller or base workspace. So you can create a function like below, and then call it
assign(inputname(1), varargin{1}).
function assign(varName, varVal)
assignin('caller', varName, varVal);
end
2. Use a structure:
for id = 1:nargin
myVar.(inputname(id)) = varargin{id};
end
And change your code so that it uses myVar instead of individual variables.
その他の回答 (1 件)
Jiro Doke
2011 年 2 月 1 日
According to the OP's comment, it seems that inputParser may be another option. With that, you can specify optional arguments.
For cases where you can have n number of optional arguments (in no particular order), I like to use param-value pairs. I found that to be the most robust. inputParser will also deal with param-value pair input arguments.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Argument Definitions についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!