【问题标题】:Absolute and relative path conflict in ModelicaModelica中的绝对路径和相对路径冲突
【发布时间】:2021-11-18 17:41:47
【问题描述】:

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

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 和测试库中设置测试环境的良好做法提出更多问题。

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

  • 模型PensLib.Variants.Tests.TB_BallPoint用于开发变体BallPoint
  • 模型Tests.PensLib.Variants.Tests_BallPoint用于自动化测试

我希望模型Test_BallPoint 扩展模型TB_BallPoint,但我无法链接它们。我猜绝对路径PensLib.Variants.Tests.TB_BallPoint 被视为相对路径,因为PensLib 在Tests 库的“出路”中被发现,并从那里寻找路径的其余部分。有没有办法控制路径,..\..\..\PensLib\Variants\Tests\TB_BallPoint

【问题讨论】:

    标签: modelica dymola


    【解决方案1】:

    正如您已经指出的那样,这样的设置会带来麻烦。有一些方法可以解决这个问题,即全局名称查找导入,我将在下面进一步解释。

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

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

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

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

      extends .PensLib.Variants.Tests.TB_BallPoint;
    

    详见 Modelica 规范第 5 章:Scoping, Name Lookup, and Flattening,尤其是5.3.3 Global Name Lookup

    导入

    您可以简单地导入库。始终在全局范围内执行导入查找。

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

    【讨论】:

    • 很好,但请注意,您不必自己在 Dymola 中编写全局名称。设置 Advanced.PreferGlobalName = true;应该使拖放等自动进行(如果适用)。
    猜你喜欢
    • 2010-09-15
    • 2013-07-14
    • 2010-12-17
    • 1970-01-01
    • 2014-02-06
    • 2012-10-16
    • 2011-06-30
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多