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

时间:2015-05-12 12:45:17

标签: matlab size overloading operator-keyword

我有一些属性为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)

没有。它导致错误&#34;输出参数太多。&#34;,虽然内置双精度方法大小(实际上是val)与此语法一起使用。

任何人都可以给我一个提示。在这种情况下有什么问题?

1 个答案:

答案 0 :(得分:2)

如patrik的评论所述,使用varargout ...
通过添加nargout,size方法可以实现如下:

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

作为旁注,由于val可能有一个使用重载大小方法的类的角落情况,内置的使用可以替换为直接调用size

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

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

会遇到无限循环......