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を知らないので、それが何であれ、それを使用したい場合は、数値に評価されるものにする必要があります(スカラーの意味)またはテキストの一部(文字列定数の意味)。

さらに、ischarmatlab関数ですが、正しい方法で使用していません。ischar(cA(x))たとえば、が文字列またはテキストのスニペットである場合に評価されtrue、それ以外 の場合に評価されるように使用する必要があります。cA(x)falsecA(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 に答える