Check class of input variables

5 次查看(过去 30 天)
Ledger Yu
Ledger Yu 2018-9-12
编辑: Stephen23 2018-9-12
I have a function that requires several input variables:
function output = myFun(A,B,C,D,E,...)
% code
end
I need to check the class of those inputs and convert all "cell" to "mat" format. Of course I can do something like this:
if iscell(A)
A = cell2mat(A)
end
if iscell(B)
B = cell2mat(B)
end
if iscell(C)
C = cell2mat(C)
end
...
But how do I do that in a for loop?
  1 个评论
Stephen23
Stephen23 2018-9-12
编辑:Stephen23 2018-9-12
"But how do I do that in a for loop?"
Magically accessing variable names in a loop is one way that beginners force themselves into writing slow, complex, buggy code that is hard to debug. read this to know why:
The situation is easy to avoid with varargin and indexing.

请先登录,再进行评论。

回答(1 个)

Stephen23
Stephen23 2018-9-12
编辑:Stephen23 2018-9-12
Simply using varargin:
function out = myFun(varargin)
idx = cellfun(@iscell,varargin);
varargin(idx) = cellfun(@cell2mat,varargin(idx),'uni',0);
...
end
You can then access the elements of varargin trivially using indexing.
  2 个评论
Ledger Yu
Ledger Yu 2018-9-12
After this, I suppose I should do something like this:
A = varargin{1};
B = varargin{2};
C = varargin{3};
...
or is there an easier way?
Stephen23
Stephen23 2018-9-12
编辑:Stephen23 2018-9-12
"After this, I suppose I should do something like this:"
A = varargin{1};
B = varargin{2};
C = varargin{3};
I don't suppose that, but you could if you want to. Personally I would not bother, because all of the data is trivially accessibly using indexing already.
"or is there an easier way?"
No. Read my comment to know why:

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Data Type Identification 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by