2012-04-27 12 views
2

私は構造体にセル配列で物事のそれぞれのクラス、長さを置く機能、および値を書き込むしようとしているが、私はswitch文でエラーを得続ける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を見ていることを意味していて、それが何であるかは分かりません。したがって、それを使用したいのであれば、数値に評価する何かをする必要があります。スカラー)またはテキストの部分(文字列定数によって何を意味するか)を指定します。

さらに、ischarはmatlab関数ですが、正しい方法で使用していません。たとえば、ischar(cA(x))として使用する必要があります。が文字列またはテキストスニペットの場合、trueと評価され、cA(x)がその他の場合はfalseと評価されます。

switchがこのように動作すると素敵ですが、そうではありません。 switchの部分に物を置くことはできません。次に、switchの部分に評価する必要のある関数をリストします。私はそれで引数を指定して、それが必要な方法を使用するclass機能を使用していた。ここ

あなたがすることができるものの種類はこれです。そして、私はその関数の出力に基づいて私のケースを切り替えると、クラスは文字列を出力します。

+1

もちろん、Matlabが提供する 'class'関数は、コード全体をほとんど置き換えます –

関連する問題