首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用可替换类型的因果连接器?

如何使用可替换类型的因果连接器?
EN

Stack Overflow用户
提问于 2020-07-14 15:42:08
回答 1查看 80关注 0票数 2

虽然https://www.modelica.org/events/Conference2003/Modelica03-AdvancedTutorial.pdf是从2003年开始的,但我仍然相信第29页的代码会给出一个带有replaceable type的因果关系(RealPort)。

代码语言:javascript
复制
connector RealPort
  replaceable type SignalType = Real;
  extends SignalType;
end RealPort;

虽然此代码适用于Wolfram SystemModeler的当前发行版,但Open Modelica v1.16.0-dev.03 (64-bit)会发出抱怨,从而产生以下错误:

类'SignalType‘在’扩展SignalType‘中是可替换的,基类名称必须是传递不可替换的。

那么,谁对这里的传递不可替换性是正确的,以及如何正确地做到这一点呢?

参考资料:

  • 第6.2.1节 Modelica语言规范v3.5-dev (“传递不可替换”)
  • 第7.1.4节 Modelica语言规范v3.5-dev (“对基类和约束类型的限制不可替换”)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-15 07:26:58

上面的类是不可替换的,因此翻译应该失败。

不可替换的规则要避免的问题是一组模型,如:

代码语言:javascript
复制
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似乎同时是两件事,并且不清楚问题是在哪里引入的,因为重新声明似乎与约束类一致,而原始类看起来还可以。

(过渡意味着您可以使用不可替换的中间类来混淆事物。)

而禤浩焯的解决方案是一个很好的解决方案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62898876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档