我正在尝试创建一个 MATLAB 类,其中的成员变量由于方法调用而更新,但是当我尝试更改类中的属性时,它(显然,根据我对 MATLAB 内存管理的理解)会创建一个副本对象的属性,然后修改它,保持原始对象的属性不变。
classdef testprop
properties
numRequests=0;
end
methods
function Request(this, val)
disp(val);
this.numRequests=this.numRequests+1;
end
end
end
.
>> a=testprop;
>> a.Request(9);
>> a.Request(5);
>> a.numRequests
ans = 0
使用值(普通)类
使用值类时,您需要告诉 Matlab 存储对象的修改副本以保存属性值的更改。所以,
>> a=testprop
>> a.Request(5); % will NOT change the value of a.numRequests.
5
>> a.Request(5)
5
>> a.numRequests
ans =
0
>> a=a.Request; % However, this will work but as you it makes a copy of variable, a.
5
>> a=a.Request;
5
>> a.numRequests
ans =
2
As Kamran注意,这需要更改函数的定义Request
to be
function this = Request(this, val)`
使用句柄类
如果继承自handle类,那就是
classdef testprop < handle
然后你可以写,
>> a.Request(5);
>> a.Request(5);
>> a.numRequests
ans =
2
请注意,这会更改对象的行为,请参阅文档了解值类和句柄类之间的区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)