Octave句柄类方法返回对象而非数值问题求助
解决Octave Handle类方法返回对象而非预期值的问题
嘿,刚接触Octave/Matlab遇到这种问题很正常,我来帮你捋清楚问题出在哪!
你遇到的核心问题是handle类的方法定义规则没搞对:在Octave(和Matlab)中,类的非静态方法第一个参数必须是类的实例对象——也就是你调用方法时的test对象会自动被传入这个参数位置。
看你原来的方法定义:
function o = doNothing(vec) o = vec; end
这里你把输入参数vec放在了第一个位置,Octave会默认把这个vec当成TestClass的实例来处理,最后你把o赋值为vec,但实际上这个o已经被绑定成类实例的占位符了,所以返回的还是TestClass对象,而不是你要的向量。
修正后的代码
把方法的第一个参数改成类实例,然后把输入参数放在后面,调整返回值的变量名就搞定了:
classdef TestClass < handle methods function res = doNothing(o, vec) res = vec; end end end
关键解释
- 第一个参数
o:代表当前的TestClass实例(调用test.doNothing(...)时,test会自动传入这里,不需要你手动传) - 第二个参数
vec:这才是你要传入的向量参数 - 返回值
res:直接赋值为vec,这样调用x = test.doNothing([1, 0, 1])时,x就会得到预期的[1, 0, 1]啦
如果之后你需要写修改类属性的方法,就可以通过o.propertyName = xxx来操作实例的属性,这也是handle类的核心用法之一~
内容的提问来源于stack exchange,提问作者sajran
相关产品推荐
相关产品推荐

