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]

如何让 field2 的值像 field1 中的双精度值一样显示?

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/48637试图disp很好地重新创建该函数。因此,您可以将其用于disp.m放入@struct文件夹中。

于 2014-12-03T05:25:34.113 回答