无法更新 Matlab 中的类定义

2023-12-11

我在使用 Matlab 时遇到了一个令人恼火的问题,并且先前的回答不幸的是,显然同样的问题对我没有帮助。我很抱歉这个问题相当长 - 你需要相当多的信息来重现这个问题(我试图尽可能地修剪它......)

问题是这样的:无论我做什么,在我使用过一个类之后我都不能“让Matlab忘记”。使用的值似乎是持久的,并且对类定义的编辑不会“粘住”。在后一种情况下,错误消息是:

警告:“myClass”的类文件已更改;但改变 无法应用,因为基于旧类文件的对象仍然存在 存在。如果您使用这些对象,您可能会得到意想不到的结果。你 可以使用“clear”命令删除这些对象。请参阅“帮助清除” 有关如何删除这些对象的信息。

即使在之后我也收到了这条消息

>> clear all
>> clear functions
>> clear ans

尽管我试图清除它,但不知何故,类定义仍然是持久的。更糟糕的是,当我修改类实例的值然后清除它时,该值在某种程度上并没有“忘记”。为了说明这一点,这里是源代码myClass:

% a simple class definition that shows the problem that I cannot
% figure out how to redefine a class without restarting Matlab
classdef myClass < handle
    properties
        precursors = {'none'};
        numPre = {1};
        value = 1;
    end

    methods
        function obj = myClass(pre, num, val)
            % constructor
            if nargin > 0
                obj.precursors = pre;
                obj.numPre = num;
                obj.value = val;
            end
        end
        function v = sumVal(obj)
            % find the sum of the value of all precursors
            n = numel(obj.precursors);
            v = 0;
            for ii = 1:n
              pc = obj.precursors{ii};
              if isa(pc, 'myClass')
                  if ii==1
                      v = 0;
                  end
                  v = v + sumVal(pc) * obj.numPre{ii};
              else
                  v = obj.value;
              end
            end
        end
    end

    % only the following named instances may exist:
    enumeration
      grandpa   ({'none'},           {1},  1)
      father    ({myClass.grandpa},  {3}, -1)
      son       ({myClass.father},   {2}, -1) 
    end
end

在 Matlab 的新实例中,我执行以下操作:

>> son = myClass.son;
>> sumVal(son)

ans = 

     6

>> grandpa = myClass.grandpa;
>> grandpa.value = 5;
>> sumVal(son)

ans =

    30

到目前为止,一切都很好。这sumVal函数发现父亲和祖父,并且sumVal计算正确(第一种情况为 6 * 1,第二种情况为 6 * 5)。

现在我删除“一切”(我认为):

>> clear all
>> clear functions
>> clear ans

我只创建一个变量:

>> son = myClass.son;

现在关键来了——意想不到的答案

>> sumVal(son)

ans =

    30

当我检查加载的变量时,我发现

>> whos
Name    Size       Bytes  Class     Attributes

son      1x1         112  myClass

没有grandpa实例,并且类定义文件没有被触及。然而,价值grandpa(我创建,然后删除)在某种程度上是持久的。

当我对myClass.m文件,并尝试创建一个新变量(在clear all),我收到上面显示的消息。所有这些引出了我的问题:

Matlab 在哪里隐藏我的类的实例,以便变量在clear all,以及如何清除工作区(无需重新启动)以便“重置”类定义?

我不知道这是否重要,但我正在使用 Matlab 7.14.0.739 (R2012a)


您有一个中间实例myClass.fatherMATLAB 不会破坏它。你必须delete你自己

>> clear grandpa
>> delete(son.precursors{1})
>> clear son
>> clear classes
>> son = myClass.son
son = 
    son    
>> sumVal(son)
ans =
     6

编辑: 或者,您可以向您的类添加析构函数

    function delete(obj)
        if isa(obj.precursors{1}, 'myClass')
            delete(obj.precursors{1});
        end
    end

and use delete(son)而不是把它留给clear功能来破坏。您可以将此扩展到您的案例并递归删除树中的所有实例。

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

无法更新 Matlab 中的类定义 的相关文章

  • WriteLine 与类

    我正在制作一个 SchoolApp 程序来学习 C 并且我正在尝试实现以下主要功能 namespace SchoolApp class Program public static void Main string args School s
  • 什么是 ANN 中的纪元以及它如何转换为 MATLAB 中的代码?

    我试图理解 并可视化 训练人工神经网络的时代到底是什么 我们有一个包含约 7000 个产品的训练集 其中有 10 个特征 输入 这些产品必须根据这 10 个输入分为 7 个类别 我们的 ANN 有 10 个输入 这些输入进入由 10 个神经
  • 为什么快速调用时Python类的id不唯一?

    我正在Python 3 3 3 中做一些事情 我遇到了一些让我困惑的事情 因为据我了解 类每次被调用时都会获得一个新的id 假设您在某个 py 文件中包含以下内容 class someClass pass print someClass p
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 我需要转义该 MATLAB 字符串中的字符吗?

    我想在 MATLAB 中调用以下 bash 命令 grep Up to test linux vision1 1 log awk print 7 I use system 在MATLAB中 但结果有错误 gt gt status strin
  • 我如何使用 cout << myclass

    myclass是我写的一个C 类 当我写的时候 myclass x cout lt lt x 我该如何输出10 or 20 2 就像一个integer or a float value 通常通过重载operator lt lt 对于你的班级
  • 在Python中将数据结构保存到文件的最简单方法?

    假设我有这样的东西 d abc 1 2 3 qwerty 4 5 6 最简单的方法是什么以编程方式将其放入一个我可以稍后从 python 加载的文件中 我可以以某种方式将其保存为 python 源吗 从 python 脚本中 而不是手动 然
  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • (在 Ruby 中)允许混合类方法访问类常量

    我有一个为其定义常量的类 然后我定义了一个类方法来访问该类常量 这很好用 一个例子 usr bin env ruby class NonInstantiableClass Const hello world class lt lt self
  • JPA 中的复合主键

    EmbeddedId 或 IdClass 注释用于表示复合主键 我该如何使用不带 EmbeddedId或IdClass 的复合主键 如果可以在没有 EmbeddedId或IdClass 的情况下使用复合主键 那么我该如何使用EntityMa
  • 在Python中将字典转换为以键作为对象名称的对象

    我有一本这样的字典 d item1 Hi 150 495 item2 Hola 590 40 我想将其转换为对象 如果可能的话递归地 我有一堂课 class Item def init self thetuple self greeting
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在文本集中创建所有字符组合?

    例如 我有这样的文本集 第 1 栏 a b 第 2 栏 l m n 第 3 栏 v w x y 我想将它们组合起来以获得如下输出 alv alw alx aly amv amw amx amy 这将输出 24 种文本组合 如果我只使用前两列
  • 没有从 {classpath*:META-INF/persistence.xml} 解析持久性单元

    使用 Spring Core 3 0 5 Hibernate 3 6 0 这个问题的标题是在使用我正在维护的应用程序启动 Tomcat Web 服务器 6 0 29 时引发的 java lang IllegalStateException
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • 多次重定义错误

    在了解了有关类和指针的更多信息后 我重构了一个程序并删除了超过 200 行代码 在此过程中创建了另外两个类 Location and Piece 问题是 在编译完所有内容后 链接器抱怨构造函数Piece被定义了多次 有很多错误 In fun
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标

随机推荐