2

我正在尝试编写一个函数,将单元格数组中每个事物的类、长度和值放入一个结构中,但是我不断收到 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)
4

1 回答 1

6

isnum不是 Matlab 函数。 isnumeric可能是你想的,但不是你输入的。这意味着您的代码正在查看case isnum并且它不知道到底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的方式使用了该函数,其中包含一个参数。然后我根据该函数的输出切换我的案例,类输出一个字符串。

于 2012-04-27T18:18:23.547 回答