Моя проблема
Если у меня есть локальный класс с именем SomeClass. И я запускаю следующий скрипт.m:
SomeClass.m
classdef SomeClass
end
script.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
Итак, мои вопросы:
- Почему это происходит?
- Что я могу сделать, чтобы решить / обойти это?
Информация о бонусе
В реальном программном обеспечении, которое я пишу (монстр в 50 тысяч строк), вышеуказанные проблемы встречаются практически во всех переменных, содержащих meta.class'ы. Да, я сказал почти :) Это часть странностей, поэтому иногда это происходит для одних классов, а не для других? Так что в частном случае, когда я столкнулся с этой проблемой, у меня есть два класса в подпакетах, что-то вроде:
package.subpackage.ExampleReport
package.subpackage.FlowchartReport
Два класса почти идентичны и являются подклассами одного и того же базового класса. Все переменные? Package.subpackage.ExampleReports по-прежнему сохраняются даже после команды cd. Но не те, которые указывают на? Package.subpackage.FlowchartReports. К сожалению, я не смог воспроизвести это на простом примере.
Почему я не могу просто пропустить команду cd ()
Я запускаю программу командной строки Windows, используя команду system (). В этом конкретном случае важно, чтобы я находился на правильном пути для правильного функционирования вызова.