Получить данные модуля без использования функции чтения

Я пытаюсь добраться до атрибутов входящих и исходящих ссылок нескольких объектов, и моя цель состоит в том, чтобы не перечитывать один и тот же модуль повторно, сохраняя модуль чтения в списке пропусков и проверяя список пропусков, прежде чем читать модуль в следующий раз. вокруг.

Итак, мой вопрос: как мне получить данные о названии модуля, которое я сохранил в списке пропуска, если он уже был открыт ранее? Будет ли строки m2 = module item str2 достаточно, чтобы заменить функцию чтения, если этот модуль был открыт ранее?

Ниже моя попытка получить атрибуты ссылок на объект:

Skip sInlink = create()

void get_object_inlinks (Object obj)
{
   string str, str2
   LinkRef lk = null
   Object o = null

   for lk in all (obj <- "*") do
   {
     ModName_ mn = source(lk)
     str = fullName(mn)
     if (!find(sInlink, str, str2))
     {
        m2 = read(str, false)
        put(sInlink, str, str)
     }
     else
        m2 = module item str2

     if (m2 != null)
     {
        o = gotoObject(sourceAbsNo(lk), m2)
        // get object o attributes
        ...
     }
   }
}

1 ответ

Решение

Есть ли причина, по которой вы не хотите перечитывать модуль? Когда модуль открыт, повторное чтение не открывает модуль, если вы не закрываете его каждый раз.

Однако альтернативой является сохранение дескриптора модуля в списке пропусков вместо имени модуля.

put(sInlink, str, m2)

Тогда вместо:

if(!find(sInlink, str, str2))

использовать:

if(!find(sInlink, str, m2))

Если str найден он поместит дескриптор модуля в m2, если нет, вы можете продолжить чтение, как вы делаете.

И на тот случай, если у вас его еще нет, вы должны перебрать список пропусков и закрыть все модули в конце кода.

for m2 in sInlink do
{
  if(!null m2) close m2
}

Удачи!

Другие вопросы по тегам