我想使用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.CustomDisplay
等displayNonScalarObject
等其他方法似乎没有帮助 - 这些也永远不会被调用。
发生了什么?对于枚举类,disp
和display
的工作方式是否有所不同,以至于matlab.mixin.CustomDisplay
覆盖的任何内容都会被忽略?
有没有办法使用matlab.mixin.CustomDisplay
获得自定义显示,但使用枚举类?
PS我可以直接在不从disp
继承的枚举类上重载display
和/或matlab.mixin.CustomDisplay
,这样可以正常工作。但我希望尽可能使用matlab.mixin.CustomDisplay
。
答案 0 :(得分:0)
如果其他人有兴趣,我会回答我自己的问题。
问题是参考MATLAB R2014a提出的。在R2014b中,matlab.mixin.CustomDisplay
的文档中添加了一个附加说明,明确表示无法使用matlab.mixin.CustomDisplay
派生枚举类的自定义显示,并建议最佳方法是超载disp
。