Доступ к параметрам записи в Modelica без объявления экземпляра записи - PullRequest
2 голосов
/ 09 октября 2019

В Modelica я могу получить доступ к содержимому экземпляра записи следующим образом:

model Unnamed1
  record Example
    parameter Real x = 5;
  end Example;

  Example ex;
  Real test;
equation 
  test = ex.x;
end Unnamed1;

Однако я хотел бы получить доступ к содержимому записи без объявления экземпляра записи. Примерно так:

model Unnamed1
  record Example
    parameter Real x = 5;
  end Example;

  Real test;
equation 
  test = Example().x;
end Unnamed1;

... но это не работает. Есть ли способ добиться того, что я пытаюсь сделать?

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Да, это возможно без фактического экземпляра в модели, но это требует некоторого дополнительного кода.

model Unnamed1
  record Example
    parameter Real x = 5;
  end Example;

  function getX
    input Example r;
    output Real x;
  algorithm 
    x:=r.x;
  end getX;

  Real test;
equation 
  test = getX(Example());
end Unnamed1;

(я знаю, что это обманывает наличие экземпляра в функции, но....) Другой вариант:

  for r in {Example()} loop
    test=r.x;
  end for;

(допускается в соответствии с https://github.com/modelica/ModelicaSpecification/issues/1521)

1 голос
/ 09 октября 2019

Это невозможно (даже с грамматической точки зрения). Правая часть точки (.) Должна быть ссылкой на класс или компонент. Доступ к константам / параметрам в пакетах возможен только через точечную запись.

package X
  constant Real x = 1;
end X;

model M
  Real x = X.x
end M;
...