Modelica中的绝对和相对路径冲突

Absolute and relative path conflict in Modelica

我想建立一个测试库并将其与正在开发的库分开。我的第一个想法是采用如下结构:

PensLib
--Variants
----BallPoint
----FountainPen
----Tests
------TB_BallPoint

HammocksLib
--Variants
----SingleHammock
----DoubleHammock
----Tests
------TB_DoubleHammock
--Systems
----IndoorWalls
----OutdoorWallAndTree
----CoconutPalms
----Tests
------TB_IndoorWalls
Tests
--PensLib
----Variants
------Test_BallPoint      // extends PensLib.Variants.Tests.TB_BallPoint
--HammocksLib
----Variants
------Test_DoubleHammock  // extends HammocksLib.Variants.Tests.TB_DoubleHammock
----Systems
------Test_IndoorWalls    // extends HammocksLib.Systems.Tests.TB_IndoorWalls

现在让我们假设我构建我的库的方式是有意义的(很可能没有)。我将很快就在 Dymola 和测试库中设置测试环境的良好实践提出更多问题。

我的问题是关于在模型中处理相对和绝对路径的正确方法,如果可能的话。

我希望模型 Test_BallPoint 扩展模型 TB_BallPoint,但我不能 link 它们。我想绝对路径 PensLib.Variants.Tests.TB_BallPoint 被视为相对路径,因为 PensLib 是在测试库的“出路”中找到的,并且从那里它会寻找路径的其余部分。有没有办法控制路径,有点像 ..\..\..\PensLib\Variants\Tests\TB_BallPoint?

正如您已经注意到的那样,这样的设置会带来麻烦。有一些解决方法,即 global name lookupimports,我将在下面进一步简要解释。

当您在某些情况下遇到这种情况时,这两种解决方案都很好。但是如果你必须一直使用它,你的设置就会变得不必要的复杂。

因此,我建议让自己的生活更轻松并更改您的包结构:

  • 要么为每个库创建一个专用的测试库,可能PensLib_TestsHammocksLib_Tests
  • 或者重命名 Tests 库中的包,不要使用确切的库名称
全局名称查找

您可以使用绝对 class 路径。它们用前导 . 表示,所以这应该有效:

  extends .PensLib.Variants.Tests.TB_BallPoint;

参见 Modelica 规范第 5 章:Scoping, Name Lookup, and Flattening for details, especially 5.3.3 Global Name Lookup

正在导入

您只需导入库即可。导入查找始终在全局执行。

  import PensLib;
  extends PensLib.Variants.Tests.TB_BallPoint;