hoo*_*one 7 oop matlab enumeration
鉴于以下两个类
classdef EnumClass
enumeration
enumVal1
enumVal2
end
end
classdef EnumDisplay
properties
enumValue = EnumClass.enumVal1
numberValue = 1
end
end
Run Code Online (Sandbox Code Playgroud)
显示时,显示EnumClass该值:
>> E = EnumClass.enumVal1
E =
enumVal1
Run Code Online (Sandbox Code Playgroud)
但是EnumDisplay在命令窗口中显示时,枚举值被抑制,只显示数组大小和类.
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: [1x1 EnumClass]
numberValue: 1
Run Code Online (Sandbox Code Playgroud)
在类属性列表中显示枚举值的最简单方法是什么.也就是说有一个简单而通用的方法让类显示如下:
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: enumVal1
numberValue: 1
Run Code Online (Sandbox Code Playgroud)
我怀疑这与继承自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
Run Code Online (Sandbox Code Playgroud)
现在显示如下:
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: 'enumVal1'
numberValue: 1
Run Code Online (Sandbox Code Playgroud)
这几乎就在那里,但并不完全.我不希望枚举值在引号中.
好吧,好吧……这不是最优雅的方法——当然不如使用那么优雅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
Run Code Online (Sandbox Code Playgroud)
结果:
>> C = EnumDisplay()
C =
EnumDisplay with properties:
enumValue: enumVal1
numberValue: 1
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,这可能不是完全通用的,因为我可能没有适当地涵盖所有可能的格式fmt。但如果你真的很绝望,也许这样的事情会起作用。