给出以下两个类
classdef EnumClass
enumeration
enumVal1
enumVal2
end
end
classdef EnumDisplay
properties
enumValue = EnumClass.enumVal1
numberValue = 1
end
end
显示EnumClass
时,会显示以下值:
>> E = EnumClass.enumVal1
E =
enumVal1
但是在命令窗口中显示EnumDisplay
时,枚举值被抑制,只显示数组大小和类。
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: [1x1 EnumClass]
numberValue: 1
在类属性列表中显示枚举值的最简单方法是什么。即是否有一种简单而通用的方法让课程显示如下:
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: enumVal1
numberValue: 1
我怀疑这与从某个地方继承matlab.mixin.CustomDisplay
类有关,但是我希望它尽可能通用,以限制我需要为每个枚举类做的编码量,以及/或每个在属性中具有枚举值的类。
我能够找到解决这个问题的部分解决方案,但效果并不理想。
classdef EnumDisplay < matlab.mixin.CustomDisplay
properties
enumValue = EnumClass.enumVal1
numberValue = 1
end
methods (Access = protected)
function groups = getPropertyGroups(This)
groups = getPropertyGroups@matlab.mixin.CustomDisplay(This);
groups.PropertyList.enumValue = char(This.enumValue);
end
end
end
现在显示如下:
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: 'enumVal1'
numberValue: 1
这几乎就在那里,但并不完全。我不希望枚举值在引号中。
答案 0 :(得分:0)
好吧,好吧......这不是最优雅的方法 - 当然不像使用matlab.mixin.CustomDisplay
那样优雅 - 但有一种可能性就是尝试自己复制这些功能,以一种给你的方式更多的控制。这是我在渡轮上一起砍的......
classdef EnumDisplay
properties
enumValue = EnumClass.enumVal1
numberValue = 1
end
methods
function disp(This)
cl = class(This) ;
fprintf(' <a href="matlab:helpPopup %s">%s</a> with properties: \n\n',cl,cl) ;
prop = properties(This) ;
len = max(cellfun(@length,prop)) ;
for ii = 1:numel(prop)
if isnumeric(This.(prop{ii}))
fmt = '%g' ;
else
fmt = '%s' ;
end
filler = char(repmat(32,1,4+len-length(prop{ii}))) ;
fprintf('%s%s: ',filler,prop{ii}) ;
fprintf(sprintf('%s \n',fmt),char(This.(prop{ii}))) ;
end
end
end
end
结果:
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: enumVal1
numberValue: 1
唯一的问题是,这可能不是完全通用的,因为我可能没有适当地涵盖所有可能的格式fmt
。但如果你真的很绝望,也许这样的事情会起作用。