覆盖用户定义类的值在结构字段时的显示方式

时间:2012-10-11 18:35:13

标签: matlab oop enums

我创建了自己的类,就像枚举类型一样。我已经覆盖了方法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中的double值一样?

2 个答案:

答案 0 :(得分:1)

结构的disp方法显示数字和单元格数组的内容(如果它们可以连续写入),另外显示类/大小信息:

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

s = 

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

因此,为了显示枚举的值,您需要为结构重载@struct。为此,您需要在路径上创建一个disp目录,并创建自己的{{1}}方法,希望能够忠实地再现Matlab的功能,但您的特定类除外。简而言之:它是可能的,但我宁愿不是那样做的人。

答案 1 :(得分:-1)

此提交http://www.mathworks.com/matlabcentral/fileexchange/48637尝试很好地重新创建disp函数。因此,您可以将此用于放入disp.m文件夹中的@struct