Matlab开关盒

时间:2012-04-27 18:01:56

标签: 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
            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)

1 个答案:

答案 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函数的方式需要使用它,并带有一个参数。然后我根据该函数的输出切换我的案例,类输出一个字符串。