用户定义类的标量函数

问题描述 投票:0回答:1

我有一个类在其他属性中存储矩阵。 在类中,我重载了大小函数以返回矩阵的大小并且工作正常。 问题是当我将 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 中按预期工作。 这是怎么回事?

class octave
1个回答
0
投票

你的对象是一个标量:只有一个对象。

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
函数,你还需要重载一堆其他函数,以保持一致。

© www.soinside.com 2019 - 2024. All rights reserved.