4

私はオブジェクトを持っていますPerson p;。次のプロパティはpのプロパティです。

Properties:
     PersonName: 'John Doe'
     JobType: [1x1 JobTypes]

JobType は、JobTypesJobType の列挙を含むクラスのオブジェクトです。JobType: Manager代わりに見たいJobType: [1x1 JobTypes]。何かご意見は?

4

2 に答える 2

4

私は、Matlab の列挙型クラスが好きではありませんでした。したがって、ここで何が起こっているのかを真に理解するには、経験が少なすぎます。それでも、試してみます。列挙型クラスには値しかありません。文字列ではありません。のようなもの

J = JobTypes.Manager

JobTypesは、クラス オブジェクトを変数に割り当て、 にJ関連付けられた値に設定しますManager。この値は Matlab の内部で選択され、ユーザーには表示されません。J = Managerコマンド ラインのようにきれいに表示されるのは、Matlab の標準dispdisplay列挙型クラスの実装によるものです。このメソッドは、別のクラス内からの呼び出しと組み合わせて正しく機能しないと思いますdisplay

displayこれを回避するには、次のように独自のメソッドを定義できPersonます。

classdef Person < handle

    properties
        PersonName = 'John Doe'
        JobType  = JobTypes.Manager
    end

    methods       
        function  display(self)   
            fprintf(...
                ['Properties:\n',...
                '   Personname: ''%s''\n',...
                '      JobType: %s\n'],...
                   self.PersonName,...
                   self.JobType.char);            
        end
    end

end

JobType.chartoString列挙型クラスの Matlab のバージョンであるため、これを挿入するとfprintf実際の文字列が表示されます! (これについて@zagyに称賛)

Mathworks がdisplay独自のクラスのいくつかのメソッドをどのように実装したかを見て、ディスプレイでスーパークラス、メソッド、イベントなどへのリンクを取得する方法を感じてください。

于 2012-08-24T12:59:59.440 に答える
2

これを実現するには、クラスのメソッドdisplay(obj)とメソッドを上書きする必要があります。disp(obj)

たぶん、次の 2 つのページが役立ちます: 1 , 2

于 2012-08-24T12:59:31.357 に答える