Modelica开发中库间绝对路径与相对路径冲突问题咨询
Modelica/Dymola路径引用冲突解决方案
你对问题原因的判断是正确的:Modelica默认的命名查找规则是优先从当前所在包向下匹配,找不到才会向上到父层级检索,因此你在Tests.PensLib.Variants包下写PensLib时,会优先匹配Tests库下的同名PensLib子包,而不是顶层的PensLib库。
有两种标准写法可以解决该问题:
1. 强制使用顶层绝对路径(首推)
Modelica语法支持在路径开头加英文句号.标识该路径为顶层绝对路径,不会从当前所在命名空间向下检索,直接从所有已加载库的最顶层开始匹配。
你只需要将继承语句的父类路径改为:.PensLib.Variants.Tests.TB_BallPoint
即可直接匹配到顶层的PensLib库下的对应测试基准模型,完全避免和Tests库下同名的PensLib子包冲突。
2. 相对层级回退写法(类文件系统的..回退)
Modelica支持用多个连续的前置点表示向上回退命名空间层级,每多一个点就多回退一级,和文件系统的..作用一致:
你当前的Test_BallPoint位于Tests.PensLib.Variants包下,需要回退3层到顶层命名空间,再向下找目标路径,对应写法为:....PensLib.Variants.Tests.TB_BallPoint
注意:相对回退写法依赖当前模型的包层级,如果你后续调整测试库的包结构,需要同步修改回退层级,维护成本高于绝对路径写法。
内容的提问来源于stack exchange,提问作者user12812532
相关产品推荐
相关产品推荐

