我想定义一个函数,该函数在给定输入整数索引(0,1或2)的情况下返回可替换记录(MyRecord0,MyRecord1或MyRecord2)。
请注意,这只是一个简单的演示示例案例,实际上可能还有更多记录,每个记录都包含其他参数。
示例记录的定义如下所示:
record MyRecord0
parameter Integer myIndex = 0;
parameter Real myValue = 0;
end MyRecord0;
record MyRecord1
extends MyRecord0(
myIndex = 1,
myValue = 1);
end MyRecord1;
record MyRecord2
extends MyRecord0(
myIndex = 2,
myValue = 2);
end MyRecord2;
我已经能够使用下面显示的getRecord函数从函数中成功返回相应的记录,但是我需要为函数中的每个记录类型显式声明一个对象。
function getRecord
input Integer index "record index";
replaceable output MyRecord0 myRecord;
// Explicit declaration of instances for each possible record type
MyRecord0 record0;
MyRecord1 record1;
MyRecord2 record2;
algorithm
if index == 1 then
myRecord := record1;
else
if index == 2 then
myRecord := record2;
else
myRecord := record0;
end if;
end if;
end getRecord;
任何人都可以建议一种替代语法,无需在函数中声明每种可能记录类型的实例吗?例如,我尝试过如下所示的变体,但找不到合适编译的令人满意的方法。
function getRecord_Generic
input Integer index "record index";
replaceable output MyRecord0 myRecord;
redeclare MyRecord1 myRecord if index == 1; else (redeclare MyRecord2 myRecord if index == 2 else redeclare MyRecord0 myRecord);
end getRecord_Generic;
或者
function getRecord_Generic2
input Integer index "record index";
replaceable output MyRecord0 myRecord;
algorithm
if index == 1 then
redeclare MyRecord1 myRecord;
else
if index ==2 then
redeclare MyRecord2 myRecord;
else
// default case
redecalre MyRecord0 myRecord;
end if;
end if;
end getRecord_Generic2;
任何提示或建议都表示赞赏!
答案 0 :(得分:2)
假设这个例子很简单:
function getRecord2
input Integer index "record index";
output MyRecord0 myRecord;
algorithm
if index==1 then
myRecord := MyRecord1();
else
if index == 2 then
myRecord := MyRecord2();
else
myRecord := MyRecord0();
end if;
end if;
end getRecord2;
(仅用Dymola测试过。)
如果某些不同的记录包含其他字段,则没有好的解决方案。