在不声明记录实例的情况下访问 Modelica 中的记录参数

Accessing record parameters in Modelica without declaring a record instance

在 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;

...但这不起作用。有什么方法可以实现我想要做的事情吗?

这是不可能的(即使从语法的角度来看也是如此)。点 (.) 的右侧需要是 class 或组件引用。您只能通过点符号访问包中的 constants/parameters。

package X
  constant Real x = 1;
end X;

model M
  Real x = X.x
end M;

是的,在模型中没有实际实例是可能的,但它需要一些额外的代码。

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 允许)