如何在 Matlab 中正确重载 size() method/operator

How properly overload size() method/operator in Matlab

我有一些 class 和 属性 val

classdef SomeClass < handle

properties
   val;
end
methods
    function sz = size(this,varargin)
        sz = builtin('size',this.val,varargin{:});
    end;
end
end

如果 class SomeClass 被定义为矩阵,应该是重载此方法以获得适当大小的对象的正确方法,即。 val 是一个矩阵。赋值喜欢

a = size(b) % b is SomeClass object

有效,但是

[a,b] = size(b)

没有。它会导致错误 "Too many output arguments.",而双精度的内置方法大小(实际上是 val)使用此语法。

谁能给我一个提示。这种情况下有什么问题?

正如 patrik 在评论中提到的,使用 varargout...
添加 nargout 后,size 方法可以实现如下:

function varargout = size(this,varargin)
    [varargout{1:nargout}] = builtin('size',this.val,varargin{:});
end

作为旁注,由于 val 的可能极端情况具有使用重载大小方法的 class,可以将内置函数的使用替换为直接调用 size .

然而,这会带来更大的破坏风险,例如:

Obj = SomeClass();
Obj.val = Obj;
size(Obj);

会陷入无限循环...