дескриптор matlab meta.class для удаленного класса после cd () - PullRequest
0 голосов
/ 19 января 2019

Моя проблема

Если у меня есть локальный класс с именем 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

Итак, мои вопросы:

  1. Почему это происходит?
  2. Что я могу сделать, чтобы решить / обойти это?

Информация о бонусе

В реальном программном обеспечении, которое я пишу (монстр в 50 тысяч строк), вышеуказанные проблемы встречаются практически во всех переменных, содержащих meta.class'ы. Да, я сказал почти :) Это часть странностей, поэтому иногда это происходит для одних классов, а не для других? Так что в частном случае, когда я столкнулся с этой проблемой, у меня есть два класса в подпакетах, что-то вроде:

package.subpackage.ExampleReport
package.subpackage.FlowchartReport

Два класса почти идентичны и являются подклассами одного и того же базового класса. Все переменные? Package.subpackage.ExampleReports по-прежнему сохраняются даже после команды cd. Но не те, которые указывают на? Package.subpackage.FlowchartReports. К сожалению, я не смог воспроизвести это на простом примере.

Почему я не могу просто пропустить команду cd ()

Я запускаю программу командной строки Windows, используя команду system (). В этом конкретном случае важно, чтобы я находился на правильном пути для правильного функционирования вызова.

...