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

博客讨论了在MATLAB中为类SomeClass重载内置的'size'方法时遇到的问题。当尝试使用工作分配如[a, b]=size(b)时,会出现输出参数过多的错误。解决方案是通过添加'nargout'来调整size方法,以允许多个输出。同时,文章提醒注意在某些情况下,直接调用内置的'size'方法可能会导致无限循环的风险。
摘要由CSDN通过智能技术生成

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

会无限循环……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值