Matlab开关箱
我试图编写一个函数,将单元格数组中每一个元素的类、长度和值放入一个结构中,但switch语句不断出错Matlab开关箱,matlab,switch-statement,Matlab,Switch Statement,我试图编写一个函数,将单元格数组中每一个元素的类、长度和值放入一个结构中,但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
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)
isnum
不是Matlab函数isnumeric
可能是您所想的,但不是您所键入的。这意味着您的代码看到的是case isnum
,它不知道heckisnum
是什么,所以它告诉您它是什么,如果您想在那里使用它,您需要使它计算为一个数字(标量意味着什么)或一段文本(字符串常量意味着什么)
此外,ischar
是一个matlab函数,但您没有正确使用它。您必须将其用作ischar(cA(x))
例如,如果cA(x)
是一个字符串或文本片段,则将求值为false
如果cA(x)
是其他任何内容
如果switch
以这种方式工作会很好,但事实并非如此。您不能在开关
部分中放入某个对象,然后在开关
部分中列出需要对该对象求值的函数
你可以做的事情是:
switch class(x)
case 'double'
fprintf('Double\n');
case 'logical'
fprintf('Logical\n');
end
在这里,我按照需要的方式使用了
类
函数,其中包含一个参数。然后我根据这个函数的输出切换我的案例,类输出一个字符串 当然,Matlab提供的类
函数几乎取代了他的全部代码