带或不带句柄的嵌套 classdef? [复制]

2024-04-14

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

我写了2个类testA and testB. testB是一个调用该类的主类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

我观察到val财产在testA没有重新初始化(val in testA保留之前的值)。我不确定,但这似乎是由于handle特征。方法tt.up增加val财产在testA正如预期的那样。

其次如果我改变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不存储在对象中)。

解决方案可能是考虑handle类为testA并在完全初始化之前强制删除它testB目的。但是我不知道该怎么做。


This is 记录的行为 https://www.mathworks.com/help/matlab/matlab_oop/specifying-properties.html#brqy3km-10: 在你的testB定义,obj=testA仅在加载类定义时评估一次。该类的所有实例都将具有对同一句柄类对象的引用。

Just 位于同一文档页面下方 https://www.mathworks.com/help/matlab/matlab_oop/specifying-properties.html#br18hyr你会发现你应该创建一个新实例testA在构造函数中testB,如果你想要一个不同的实例testA对于每个实例testB:

classdef testB 
    properties
        objA
    end
    methods
        function obj=testB()
            objA = testA;
            % ... further initialization
        end
    end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带或不带句柄的嵌套 classdef? [复制] 的相关文章

  • 如何从 __subclasses__ 中删除类?

    当从类继承时 子类可以通过父类访问 subclasses method class BaseClass pass class SubClass BaseClass pass BaseClass subclasses
  • MATLAB:涉及大数的计算

    如何在 MATLAB 中执行涉及大量数字的计算 举一个简单的例子 任意精度计算器将显示 1 120 132 370 260 约为 1 56 但 MATLAB 无法执行此类计算 power 120 132 factorial 370 fact
  • 有没有办法在 Visual Studio 或 MATLAB 中“映射”程序执行顺序?

    我所说的 地图 是指我有一个 主 函数 它调用内部的许多其他程序 我希望能够看到哪个文件首先运行 第二个 第三个等等 基本上 我希望能够请参阅这个大型 OOP 设计程序 创建者没有为其制作 UML 类图 中的依赖项列表和顺序 以帮助破译代码
  • 在Matlab中将矩阵中的元素i,j设置为i*j

    我想生成一个矩阵 其中 i j 元素等于 i j 其中 i j e g 0 2 3 2 0 6 3 6 0 到目前为止 我已经发现我可以使用这个索引矩阵访问非对角线元素 idx 1 eye 3 但我还没有弄清楚如何将矩阵单元的索引合并到计算
  • 防止编译器为 C++ 类定义复制构造函数和运算符 = 重载

    有没有一种方法可以阻止编译器为 C 类定义复制构造函数 operator 重载 您可以将这些函数声明为私有函数 这样可以防止人们在使用您的类时使用它们 同时防止编译器生成它们
  • jQuery - 选择同一级别的div

    我想在单击按钮时选择一个特定的div 唯一的问题是 它必须是buttonClicked的父div的div 示例 div class container div class box h2 Langtidsparkering h2 div cl
  • 数组中 2 个百分位之间的平均元素

    我有 2 个长度为 200 的向量 例如 A 和 B 然后我使用以下方法找到数组 A 的每第二个百分位数 A1 prctile A 1 2 100 1 这样A1是一个长度为50的数组 现在我想找到A1中每两个元素内的A元素的平均值 即A的第
  • 隐藏/显示切换具有相同类名的单独 div

    我有一个 UL 列表 每个 LI 都有一个隐藏的 DIV 以及一个显示隐藏 DIV 的 更多信息 链接 但是 单击此按钮也会显示所有其他 LI 的隐藏 DIV 我怎样才能只隐藏 显示 LI 中的 DIV 而不显示所有其他隐藏的 DIV 如果
  • 从另一个类访问和设置一个类中的变量

    我有一个 shopping cart aspx cs 文件 还有一个类文件 spcart cs 购物车 aspx cs public partial class Ui ShoppingCart System Web UI Page publ
  • 与超类和子类构造函数接口

    我在 matlab 文档和之前有关使用 matlab 继承和类构造函数创建接口的问题中找不到帮助 为了使其整洁 放在一个包内 我可以将其压缩如下 而不是拖拽代码 一套 MyPkg有一个超类Super和一些子类Sub1 Sub2 我的大多数属
  • 使用 libsvm 交叉验证后重新训练

    我知道交叉验证用于选择好的参数 找到它们后 我需要在不使用 v 选项的情况下重新训练整个数据 但我面临的问题是 在使用 v 选项训练后 我得到了交叉验证精度 例如 85 没有模型 我看不到 C 和 gamma 的值 在这种情况下我该如何重新
  • 如何在课外使用$this?

    我们可以使用 this课外 请看下面的例子
  • 列出类的所有实例

    我编写了一个 Python 模块 其中有几个类继承自一个名为MasterBlock 我想在脚本中导入此模块 创建这些类的多个实例 然后获取该类的所有子级的所有现有实例的列表MasterBlock班级 我找到了一些解决方案vars Block
  • 如何检测图像中对象的实例?

    我有一张包含几个特定对象的图像 我想检测这些物体在该图像中的位置 为此 我有一些模型图像 其中包含我想要检测的对象 这些图像在我想要检测的对象实例周围得到了很好的裁剪 这是一个例子 在这张大图里 我想检测此模型图像中表示的对象 自从你最初发
  • 在 Matlab 中对列进行排序

    我有 2 列使用 textscan 导入的数据 数据看起来像这样 其中U is undetect and D is detect mydata 51 U 57 D 48 U 47 D my data 4x1 double 4x1 char
  • 类运算符

    我在编写代码时遇到问题 void main Matrix c rows cols rows cols are int numbers c 0 0 2 the line that I m having a problem to do the
  • 像数组一样初始化类对象

    我正在为学校项目创建一个自定义向量类 我希望能够像这样初始化它 vector x 2 3 4 5 C 有什么办法可以做到这一点吗 这是我的班级的标题 class vector private int vsize int valloc dou
  • 如何动态构造方法?

    我设计了一个类 它非常标准 具有一些方法属性 class foo def f1 self print f1 def f2 self print f2 def fn self print fn 现在我想创建一个包含一组 foo 实例的类 cl
  • 在其抽象超类中使用子类的泛型类型?

    在我的代码中有以下抽象超类 public abstract class AbstractClass
  • 如何获取活动对象 MATLAB GUI 的句柄

    我正在尝试使用 MATLAB GUI 创建日历 我有两个Edit Text对象 edittext1 and edittext2 我想做这个 我把光标放在edittext1然后在日历中选择日期 它会进入文本字段edittext1 同样对于ed

随机推荐