我正在尝试编写一个函数,将单元格数组中每个东西的类,长度和值放入结构中,但是我一直在使用switch语句出错
function [ out, common ] = IDcell( cA )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
cl={};
val={};
len={};
for x=1:length(cA)
switch cA(x)
case isnum
cl(x)='double';
case ischar
cl(x)='char';
case islogical
cl(x)='logical';
case iscell
cl(x)= 'cell';
end
val=[val cA{x}];
len=[len size(value(x))];
end
out=struct('value', val, 'class', cl, 'length', len);
end
[out]=IDcell(cA)
SWITCH expression must be a scalar or string constant.
Error in IDcell (line 8)
switch cA(x)
答案 0 :(得分:6)
isnum
不是Matlab函数。 isnumeric
可能是您的想法,但它不是您输入的内容。这意味着你的代码看到case isnum
并且它不知道he isnum
是什么,所以它告诉你它是什么,如果你想在那里使用它你需要做一些评估的东西一个数字(标量意味着什么)或一段文本(字符串常量意味着什么)。
此外,ischar
是一个matlab函数,但您没有以正确的方式使用它。例如,您必须将其用作ischar(cA(x))
,如果true
是字符串或文本片段,则会评估为cA(x)
,如果false
将评估为cA(x)
还有别的。
如果switch
以这种方式工作会很可爱,但事实并非如此。你不能在switch
部分放置一个东西,然后只列出需要在switch
部分对该东西进行评估的函数。
你能做的就是:
switch class(x)
case 'double'
fprintf('Double\n');
case 'logical'
fprintf('Logical\n');
end
这里我使用class
函数的方式需要使用它,并带有一个参数。然后我根据该函数的输出切换我的案例,类输出一个字符串。