虽然https://www.modelica.org/events/Conference2003/Modelica03-AdvancedTutorial.pdf是从2003年开始的,但我仍然相信第29页的代码会给出一个带有replaceable type的因果关系(RealPort)。
connector RealPort
replaceable type SignalType = Real;
extends SignalType;
end RealPort;虽然此代码适用于Wolfram SystemModeler的当前发行版,但Open Modelica v1.16.0-dev.03 (64-bit)会发出抱怨,从而产生以下错误:
类'SignalType‘在’扩展SignalType‘中是可替换的,基类名称必须是传递不可替换的。
那么,谁对这里的传递不可替换性是正确的,以及如何正确地做到这一点呢?
参考资料:
发布于 2020-07-15 07:26:58
上面的类是不可替换的,因此翻译应该失败。
不可替换的规则要避免的问题是一组模型,如:
connector RealPort
replaceable type SignalType = Real;
extends SignalType;
end RealPort;
type MySignal
type SignalType=Integer;
extends Real(...);
end MySignal;
connector MyPort=RealPort(redeclare type SignalType=MySignal);这些类的问题在于,SignalType in MyPort似乎同时是两件事,并且不清楚问题是在哪里引入的,因为重新声明似乎与约束类一致,而原始类看起来还可以。
(过渡意味着您可以使用不可替换的中间类来混淆事物。)
而禤浩焯的解决方案是一个很好的解决方案。
https://stackoverflow.com/questions/62898876
复制相似问题