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