Matlab开关箱

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

我试图编写一个函数,将单元格数组中每一个元素的类、长度和值放入一个结构中,但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)

isnum
不是Matlab函数
isnumeric
可能是您所想的,但不是您所键入的。这意味着您的代码看到的是
case isnum
,它不知道heck
isnum
是什么,所以它告诉您它是什么,如果您想在那里使用它,您需要使它计算为一个数字(标量意味着什么)或一段文本(字符串常量意味着什么)

此外,
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提供的
函数几乎取代了他的全部代码