gpt4 book ai didi

Matlab 对象实例更新

转载 作者:行者123 更新时间:2023-12-04 04:57:11 27 4
gpt4 key购买 nike

问题描述
我正在尝试构建类 的对象分析 具有可变数量的子类 重置 在分析属性重置中存储为结构(参见下面的 Matlab 代码)。类定义 分析 有一个名为 addResset 的方法,它构造了 的新实例。重置 并将此实例设置为属性重置。但是,当我创建一个实例时,比如说 A,类 Analysis 并且我使用 A.addResset 添加了一个 Resset 对象,该方法不会自动更新实例 A 中的属性 ressets:

>> A = Analysis('some_name');

>> A.addResset('some_res');

>> A

A =

Properties:
name: 'some_name'
ressets: []
stepTypes: []

Methods

Analysis addResset
相反,我必须写:
>> A = A.addResset('some_res')  

Properties:
name: 'some_name'
ressets: [1x1 struct]
stepTypes: []
当我用它的方法调用 A 时,为什么 Matlab 不更新实例 A?只要 Analysis 类是“扁平的”,这就不是什么大问题。但是,在我的(实际)情况下,每个 Resset 类也将具有 Data 类(即另一个嵌套级别)。目前,我生成了一个空的 Analysis 实例,添加了一些 Resset 类,将 Data 类添加到每个单独的 Resset 类,然后我必须将每个父对象更新到顶级(即分析)。它使我的脚本过长且杂乱无章。
我对 Matlab 的面向对象编程部分比较陌生。我在 addResset 方法的定义中做错了什么吗?在python中,当在方法中引用时,实例似乎会自动更新,我希望Matlab具有类似的功能吗?
MATLAB 代码
Matlab 版本:7.13.0.564(R2011b 32bits)
classdef Analysis

properties
name
ressets %structure of Resset objects
stepTypes
end

methods
function obj = Analysis(name)
% ANALYSIS contructs an analysis object
if nargin > 0
obj.name = name;
end
end
end

methods
function [obj resset valid_fieldname] = addResset(obj,name)
%create a new Resset class instance(PackageName.ClassName)
resset = xrf_read.Resset(name);
%replace 'possible' dots in name (=invalid fieldname)
valid_fieldname = regexprep(name,'\.','_');
%add Resset instance to ressets property
obj.ressets.(valid_fieldname) = resset;
end
end

end
为了简单起见,Reset 类看起来像
classdef Resset

properties
name
datas
end

methods
function obj = Resset(name)
% RESSET constructs a resset object
if nargin > 0
obj.name = name;
end
end
end

end

最佳答案

简短:使您的类成为句柄的子类。

这些旧样式类遵循“写入时复制”原则,这意味着它们不会更改原始实例。

关于Matlab 对象实例更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16607391/

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