在不声明记录实例的情况下访问 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 允许)
在 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 允许)