我已经定义了一个类
classdef测试性能 一个 b结束
方法 这个=测试(a,b) this.a = a; this.b = b; 结束
功能disp(这个) fprintf中(…
使用您使用的语法,您应该重载 display 功能而不是 disp 功能。
display
disp
看(不是那么简单) 相应的页面 在文档中。
你得到这个结果是因为在你的陈述中 out = [Test(1,2),Test(3,4)] ,变量 out 成为同一个类的数组 Test ,但大小[1x2]。
out = [Test(1,2),Test(3,4)]
out
Test
如果你试试 out.a 在你的控制台中,你会得到:
out.a
>> out.a ans = 1 ans = 3
这是一个逗号分隔的所有值的列表 a 在里面 out 阵列。这也是您的自定义的第一个参数 disp 功能见。然后它会看到所有值的另一个列向量 b 。要了解什么功能 fprintf 与您一起呈现,您也可以在您的控制台中尝试:
a
b
fprintf
>> [out.a,out.b] ans = 1 3 2 4 >> [out.a;out.b] ans = 1 3 2 4
以来 fprintf 按列主要顺序工作,它将首先消耗所有值列。在这种情况下,我们可以看到我们尝试的最后一个选项似乎更好。
的确,如果你改变你的 disp 功能:
function disp(this) fprintf('a=%d b=%d\n', [this.a ; this.b]); end
你得到了所需的输出:
>> out = [Test(1,2),Test(3,4),Test(5,6)] out = a=1 b=2 a=3 b=4 a=5 b=6
您定义的对象数组的大小。请记住,如果你输入一个数组 Test 对象将被列为列式:
>> out = [ Test(1,2),Test(3,4) ; Test(5,6),Test(7,8) ] out = a=1 b=2 a=5 b=6 a=3 b=4 a=7 b=8
最后一个选项,如果您想要在对象数组的显示上更加细化,可以按照自己喜欢的方式自定义它 disp 功能:
function disp(this) nElem = numel(this) ; if nElem==1 fprintf('a=%d b=%d\n', this.a , this.b ); else for k=1:nElem fprintf('a=%d b=%d\n', this(k).a , this(k).b); end end end
这会产生与以前相同的显示,但由于元素被逐一处理,您可以进一步自定义,而无需考虑数组的处理方式 fprintf 。