我有一个类在其他属性中存储矩阵。 在类中,我重载了大小函数以返回矩阵的大小并且工作正常。 问题是当我将 isscalar(a) 与类的实例一起使用时。当我期待 0 时,此函数返回 1。
根据文档: 标量 (x)
Return true if x is a scalar.
A scalar is an object with two dimensions for which size (x) returns [1, 1]
代码在 matlab 中按预期工作。 这是怎么回事?
你的对象是一个标量:只有一个对象。
builtin('size', obj)
会返回[1,1]
。 (请注意,您可以创建对象数组!)函数isscalar
实际上并不调用size
,它是一个内置函数,可以直接访问数组的大小属性,不涉及M文件代码执行. length
(返回max(size())
)和numel
(返回prod(size())
)等函数也是如此。
但是您可以像重载
isscalar
一样重载 size
来处理对象内部的矩阵:
function res = isscalar(obj)
res = isscalar(obj.matrix);
end
如果你想重载
size
函数,你还需要重载一堆其他函数,以保持一致。