4

列挙型のように機能する独自のクラスを作成しました。メソッドdisp()をオーバーライドしたので、その型を含む変数がコマンドウィンドウに表示されると、意味のあるもの(具体的には、その列挙値の名前)が表示されます。

classdef MyEnumeratedType

    properties(Constant)
        ENUMVAL1     = MyEnumeratedType(1, 'ENUMVAl1');
        ENUMVAL2     = MyEnumeratedType(2, 'ENUMVAL2');
        ENUMVAL3     = MyEnumeratedType(3, 'ENUMVAL3');
    end

    properties(Access=private)
        ordinal
        name
    end

    methods(Access=private)
        function this = MyEnumeratedType(ord, name)
            this.ordinal = ord;
            this.name = name;
        end
    end

    methods
        function disp( this )
            disp(this.name);
        end
    end

end

したがって、コマンドウィンドウで変数に割り当てると、目的の出力が得られます。

>> x = MyEnumeratedType.ENUMVAL2

x = 

ENUMVAL2

ここまでは順調ですね。しかし、タイプMyEnumeratedTypeの値を構造体のフィールドに割り当てると、その構造体の表示には値が表示されず、タイプMyEnumeratedTypeの値があることが示されるだけです。

>> mystruct.field1 = 42

mystruct = 

    field1: 42

>> mystruct.field2 = MyEnumeratedType.ENUMVAL3

mystruct = 

    field1: 42
    field2: [1x1 MyEnumeratedType]

field1のdouble値の場合と同じように、field2の値を表示するにはどうすればよいですか?

4

2 に答える 2

1

構造体のdispメソッドは、数値配列とセル配列が行に記述できる場合はその内容を示し、そうでない場合はクラス/サイズ情報を示します。

s = struct('a',1,'b',[1 2 3],'c',{{1}},'d',magic(3),'e',[1;2])

s = 

    a: 1
    b: [1 2 3]
    c: {[1]}
    d: [3x3 double]
    e: [2x1 double]

したがって、列挙型の値を表示するにはdisp、構造体をオーバーロードする必要があります。これを行うには@struct、パス上にディレクトリを作成dispし、Matlabの機能を忠実に再現する独自のメソッドを作成しますが、特定のクラスは例外です。要するに、それは可能ですが、私はむしろそれをしている人ではありません。

于 2012-10-11T19:28:04.693 に答える
-1

この投稿http://www.mathworks.com/matlabcentral/fileexchange/48637dispは、関数をうまく再現しようとしています。したがって、これをフォルダーdisp.mに入れるために使用できます。@struct

于 2014-12-03T05:25:34.113 に答える