【发布时间】:2020-07-14 15:42:08
【问题描述】:
虽然 Advanced Modelica Tutorial: Developing Modelica Libraries 来自 2003 年,但我仍然相信第 29 页中的代码会给出因果关系 connector (RealPort) 和 replaceable type:
connector RealPort
replaceable type SignalType = Real;
extends SignalType;
end RealPort;
虽然此代码在 Wolfram SystemModeler 的当前版本中有效,但 Open Modelica v1.16.0-dev.03 (64-bit) 抱怨,并给出以下错误:
“extends SignalType”中的“SignalType”类是可替换的,基类名称必须是不可替换的。
那么,关于传递性不可替换性,谁是正确的?如何正确地做到这一点?
参考资料:
-
Section 6.2.1Modelica 语言规范 v3.5-dev ("Transitive non-Replaceable")
-
Section 7.1.4 Modelica Language Specification v3.5-dev(“对基类的限制和将类型约束为传递不可替换”)
【问题讨论】:
-
OpenModelica 是肯定的。这在以前的 Modelica 规范中是允许的,但现在不再允许了。带有 Pedantic Mode 的 Dymola 也抱怨:“检查 RealPort:基类 SignalType 是可替换的”。如果没有 Pedantic Mode,Dymola 允许这样做并发出警告。
-
您可以使用短类定义而不是扩展:可替换类型 SignalType = Real;连接器 RealPort = SignalType;这应该可以正常工作。
标签: modelica openmodelica systemmodeler