MATLAB中对象属性的自定义显示
在MATLAB中,我想自定义一个对象,使其与数据类型相关的属性之一显示一个值(与类型代码对应的原始数值)及其字符串表示形式,如:“dobule”(14)。在下面的代码中,我谈论的属性称为MATLAB中对象属性的自定义显示,matlab,class,Matlab,Class,在MATLAB中,我想自定义一个对象,使其与数据类型相关的属性之一显示一个值(与类型代码对应的原始数值)及其字符串表示形式,如:“dobule”(14)。在下面的代码中,我谈论的属性称为datatype 目前,我已经重写了matlab.mixin.CustomDisplay类,并以某种方式对其进行了排序,但我必须使用一个字符串变量来合并数字和字符串,并形成一个组合输出。问题是MATLAB显示带有引号的字符串: tidx= 具有以下属性的idx: 尺寸:3 数据类型:'double(14)' 尺寸
datatype
目前,我已经重写了matlab.mixin.CustomDisplay
类,并以某种方式对其进行了排序,但我必须使用一个字符串变量来合并数字和字符串,并形成一个组合输出。问题是MATLAB显示带有引号的字符串:
tidx=
具有以下属性的idx:
尺寸:3
数据类型:'double(14)'
尺寸:[3 4 5]
这很好,但我不喜欢。当MATLAB在这个特定属性上显示一个字符串时,有没有办法去掉引号
类别定义:
classdef idx
也许适合你的班级:
function str=disp(obj)
p=properties(obj);
for i=1:length(p),
propval=get(obj,p);
if isscalar(propval) % custom special format.
% Translation of original: sizestr = ...
sprintf('%s (%d)', app.datatypenum2str(app.datatype), app.datatype);
str{i}=sprintf('%s: %s (%d)',p{i}, datatypenum2str(propval), propval);
else % standard display, mimicking getPropertyGroups@matlab.mixin.CustomDisplay
str{i}=sprintf('%s: %s',p{i},disp(propval));
end
end
str=sprintf('%s\n',str{:});
end
通过这种方式,您可以自定义属性在根/目录下的显示方式,而无需使用matlab.mixin.util.PropertyGroup包装器。您的代码是解决此问题的另一种方法,我确实考虑过重载
disp
。我希望我可以离开MATLAB来格式化输出本身,并整理出要显示的内容,避免其他内容。您的代码似乎重新格式化了它所迭代的对象中的每个属性。我认为这很容易解决,只需要一个额外的if
块,不是吗?我已经尝试将您想要的if块添加到我的提案中;-)查看isscalarThanks的if。我不确定我是否遵循,以防我写这篇文章!如果我错了,我道歉。我的意思是只对其中一个属性应用自定义格式。我不知道我遗漏了什么,但我认为当前状态下的函数会迭代所有属性,并对每个标量应用相同的格式模式,而不是仅对一个选定属性应用格式模式。无论如何,谢谢你的帮助。这是一个好的开始。我添加了一些评论。嗯