如何在 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);
会陷入无限循环...
我有一些 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);
会陷入无限循环...