如何在Matlab中正确重载size​​()方法/运算符

我有一些属性val的类

classdef SomeClass < handle

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

据推测它应该是重载此方法的正确方法,以获得类SomeClass的适当大小的对象,如果它被定义为矩阵,即. val是一个矩阵.分配就像

a = size(b) % b is SomeClass object

然而,工作

[a,b] = size(b)

才不是.它会导致错误“输出参数太多.”,而内置的方法大小为双精度(实际上是val)可以使用此语法.

任何人都可以给我一个提示.这种情况下的问题是什么?

最佳答案 正如patrik的评论中提到的那样使用varargout ……

通过添加nargout,size方法可以实现如下:

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

作为一个附注,由于val的可能角落情况具有使用重载大小方法的类,因此可以使用对大小的直接调用来替换内置的使用.

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

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

会无限循环……

点赞