我试图创建一个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
3条答案
按热度按时间zhte4eai1#
使用实值(Vanilla)类别
当使用一个值类的时候,你需要告诉Matlab保存一个修改过的对象的副本来保存属性值的变化,所以,
正如Kamran所指出的,这需要将函数
Request
的定义更改为使用句柄类
如果从句柄类继承,也就是
然后你就可以写了,
请注意,这会更改对象的行为,请参阅the documentation以了解值类和句柄类之间的区别。
soat7uwm2#
你必须记住,在Matlab中,你可能更接近C,而不是C++或Java,至少在对象方面是这样。所以,如果你想改变一个值对象的“内容”(实际上只是一个特殊的
struct
),你需要从函数中返回该对象。Azim正确地指出,如果你想要Singleton行为(从你的代码看,你似乎是这样),你需要使用一个“handle”类。从Handle派生的类的示例都指向一个示例,并且只对它进行操作。
您可以read more about the differences between Value and Handle classes.
sqougxex3#
我创建了类testprop,并尝试执行Azim建议的代码,但没有成功。当我执行以下命令时:
生成了以下错误:
使用==〉Request时出错输出参数太多。
我认为问题是我们在声明Request方法时没有确定任何输出。因此我们应该将其更改为:
现在: