gpt4 book ai didi

matlab - 带或不带句柄的嵌套 classdef?

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:05 24 4
gpt4 key购买 nike

<分区>

我正在尝试在带有嵌套类的 Matlab 中使用可更新对象(类)。我观察到似乎是由于句柄状态引起的行为。

我编写了 2 个类 testAtestBtestB 是调用类 testA 作为属性的主类:

classdef testB 
properties
objA=testA;
end
methods
function obj=testB()
obj.objA
if isempty(obj.objA.val)
obj.objA.val=5;
else
obj.objA.val=obj.objA.val+5;
end
end
function up(obj)
obj.objA.val=obj.objA.val+6;
obj.objA.val
end
end
end

首先,testA 是一个句柄类。

classdef testA < handle 
properties
val=[];
end
methods
function obj=testA()
end
function set.val(obj,tt)
obj.val=tt;
end
end
end

当我两次创建testB对象时

tt=testB
tt=testB

我观察到 testA 中的 val 属性没有重新初始化(testA 中的 val 保持之前的值).我不确定,但这似乎是由于 handle 功能造成的。 tt.up 方法按预期增加了 testA 中的 val 属性。

其次,如果我将 testA 类更改为值类。

classdef testA  
properties
val=[];
end
methods
function obj=testA()
end
function obj=set.val(obj,tt)
obj.val=tt;
end
end
end

在这种情况下,tt=testB 的连续调用每次都会创建一个新的 testB 实例和一个新的 testA 实例。不幸的是,在这种情况下,up 方法无法按预期工作(val 的新计算值未存储在对象中)。

一个解决方案是考虑testAhandle 类,并在完全初始化testB 对象之前强制删除它。但是我不知道该怎么做。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com