1

我正在尝试获取多个对象的 inlinks 和 outlinks 中的属性,我的目标是通过将读取的模块存储在跳过列表中并在下次读取模块之前检查跳过列表来不再重新读取同一个模块大约。

所以我的问题是,如果之前已经打开过,如何获取我存储在跳过列表中的模块名称的数据?如果该模块之前打开过,那么 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
        ...
     }
   }
}
4

1 回答 1

0

您是否有不想重新阅读该模块的原因?一旦模块打开,再次读取它不会重新打开模块,除非您每次都关闭它。

然而,另一种方法是将模块句柄存储在跳过列表中,而不是模块名称。

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
}

祝你好运!

于 2013-06-03T15:20:26.070 回答