自定义枚举类的显示

时间:2014-07-11 17:15:05

标签: matlab oop enums string-formatting override

我想使用matlab.mixin.CustomDisplay自定义枚举类的显示。

如果我有一个常规(非枚举)类,如下所示:

classdef test < handle & matlab.mixin.CustomDisplay
    properties
       value
    end
    methods
        function obj = test(value)
           obj.value = value;
        end
    end
    methods (Access = protected)
    function displayScalarObject(obj)
        disp(['hello ', num2str(obj.value)])
    end
    end
end

然后一切正常 - 例如,

>> a = test(1)
a = 
hello 1

但是如果我有一个枚举类,如下所示(注意添加enumeration块):

classdef test < handle & matlab.mixin.CustomDisplay
    properties
       value
    end
    methods
        function obj = test(value)
           obj.value = value;
        end
    end
    methods (Access = protected)
    function displayScalarObject(obj)
        disp(['hello ', num2str(obj.value)])
    end
    end
    enumeration
        enum1(1)
    end
end

然后显示不是自定义的 - 例如,

>> a = test.enum1
a = 
    enum1

使用调试器,我可以看到永远不会调用我的displayScalarObject方法。实施matlab.mixin.CustomDisplaydisplayNonScalarObject等其他方法似乎没有帮助 - 这些也永远不会被调用。

发生了什么?对于枚举类,dispdisplay的工作方式是否有所不同,以至于matlab.mixin.CustomDisplay覆盖的任何内容都会被忽略?

有没有办法使用matlab.mixin.CustomDisplay获得自定义显示,但使用枚举类?

PS我可以直接在不从disp继承的枚举类上重载display和/或matlab.mixin.CustomDisplay,这样可以正常工作。但我希望尽可能使用matlab.mixin.CustomDisplay

1 个答案:

答案 0 :(得分:0)

如果其他人有兴趣,我会回答我自己的问题。

问题是参考MATLAB R2014a提出的。在R2014b中,matlab.mixin.CustomDisplay的文档中添加了一个附加说明,明确表示无法使用matlab.mixin.CustomDisplay派生枚举类的自定义显示,并建议最佳方法是超载disp