2012-04-27 57 views
2

我正在尝试编写一个函数,将每个单元格数组中的每个事物的类,长度和值放入一个结构体中,但我一直收到开关语句的错误Matlab开关壳

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) 

回答

6

isnum不是Matlab函数。 isnumeric可能是你在想什么,但这不是你输入的内容。这意味着你的代码看到的是case isnum,它不知道什么是isnum,所以它告诉你它是什么,如果你想在那里使用它,你需要使它成为一个数值(这意味着什么标量)或一段文本(它通过字符串常量表示)。

此外,ischar是一个matlab函数,但你没有正确使用它。您必须以ischar(cA(x))为例,如果cA(x)为字符串或文本片段,则评估为true,如果cA(x)是其他任何内容,则评估为false

虽然如果switch以这种方式工作将是可爱的,但它不会。你不能把东西放在switch部分,然后只列出switch部分中需要评估的东西。

那种你可以做的事情是这样的:

在这里,我使用了class功能,使用它需要的方式,在它的参数。然后我根据该函数的输出切换我的情况,类输出一个字符串。

+1

当然,Matlab提供的'class'函数几乎可以代替他的整个代码 – 2012-04-27 18:22:52