0

我的问题

如果我有一个名为 SomeClass 的本地类。我运行以下 script.m:

SomeClass.m

classdef SomeClass
end

脚本.m

t = ?SomeClass;
t
cd('SomeDir');
t
cd('..');
t

然后Matlab(R2018b)会输出如下:

t = 

  class with properties:

                     Name: 'SomeClass'
              Description: ''
      DetailedDescription: ''
                   Hidden: 0
                   Sealed: 0
                 Abstract: 0
              Enumeration: 0
          ConstructOnLoad: 0
         HandleCompatible: 0
          InferiorClasses: {0×1 cell}
        ContainingPackage: [0×0 meta.package]
     RestrictsSubclassing: 0
             PropertyList: [0×1 meta.property]
               MethodList: [2×1 meta.method]
                EventList: [0×1 meta.event]
    EnumerationMemberList: [0×1 meta.EnumeratedValue]
           SuperclassList: [0×1 meta.class]


t = 

  handle to deleted class


t = 

  handle to deleted class

因此,在 cd 命令之后,变量 t 现在指向:

handle to deleted class

所以我的问题是:

  1. 为什么会这样?
  2. 我能做些什么来解决/规避它?

奖金信息

在我正在编写的实际软件(50K 行怪物)中,几乎所有包含 meta.class 的变量都会出现上述问题。是的,我说得差不多了 :) 这是奇怪的部分,所以有时它会发生在某些班级而不是其他班级?所以在我遇到这个问题的特殊情况下,我在子包中有两个类,例如:

package.subpackage.ExampleReport
package.subpackage.FlowchartReport

这两个类几乎相同,并且是同一基类的子类。?package.subpackage.ExampleReports 的所有变量即使在 cd 命令之后仍然存在。但不是那些指向 ?package.subpackage.FlowchartReports 的。遗憾的是,我无法在一个简单的示例中重现这一点。

为什么我不能跳过 cd() 命令

我使用 system() 命令运行 Windows 命令行程序。在这种特殊情况下,重要的是我位于正确的路径上以使调用正常运行。

4

0 回答 0