我的问题
如果我有一个名为 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
所以我的问题是:
- 为什么会这样?
- 我能做些什么来解决/规避它?
奖金信息
在我正在编写的实际软件(50K 行怪物)中,几乎所有包含 meta.class 的变量都会出现上述问题。是的,我说得差不多了 :) 这是奇怪的部分,所以有时它会发生在某些班级而不是其他班级?所以在我遇到这个问题的特殊情况下,我在子包中有两个类,例如:
package.subpackage.ExampleReport
package.subpackage.FlowchartReport
这两个类几乎相同,并且是同一基类的子类。?package.subpackage.ExampleReports 的所有变量即使在 cd 命令之后仍然存在。但不是那些指向 ?package.subpackage.FlowchartReports 的。遗憾的是,我无法在一个简单的示例中重现这一点。
为什么我不能跳过 cd() 命令
我使用 system() 命令运行 Windows 命令行程序。在这种特殊情况下,重要的是我位于正确的路径上以使调用正常运行。