Как иметь причинный разъем сменного типа? - PullRequest
2 голосов
/ 14 июля 2020

Хотя Advanced Modelica Tutorial: Разработка библиотек Modelica относится к 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) жалуется на следующую ошибку:

Class ' SignalType 'в' extends SignalType 'является заменяемым, имя базового класса должно быть транзитивно незаменяемым.

Итак, кто прав насчет транзитивной незаменимости здесь и как сделать это правильно?

Ссылки:

  • Раздел 6.2.1 Modelica Language Specification v3.5-dev (" Transitive Non-Replaceable")

  • Раздел 7.1.4 Modelica Language Specification v3.5-dev (" Ограничения на базе Классы и типы ограничений, которые нельзя заменить временно")

1 Ответ

4 голосов
/ 15 июля 2020

Приведенный выше класс не является транзитивно незаменимым, и поэтому преобразование должно завершиться ошибкой.

Проблема, которую намеревается избежать правило незаменимости, - это набор моделей, например: 1005 * Проблема с этими классами заключается в том, что SignalType в MyPort кажется двумя вещами одновременно, и неясно, где возникла проблема, поскольку повторное объявление кажется совместимым с ограничивающим классом, и исходный класс выглядел нормально.

(Транзитивно просто означает, что у вас могут быть промежуточные незаменяемые классы, чтобы запутать вещи.)

И обходной путь Адриана Попа - хорошее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...