입력 정수 인덱스 (0, 1 또는 2)가있는 경우 대체 가능한 레코드 (MyRecord0, MyRecord1 또는 MyRecord2)를 반환하는 함수를 정의하고자합니다.Modelica에서 교체 가능한 레코드를 반환하는 함수
이것은 간단한 데모 예제이며 실제로는 추가 매개 변수를 포함하는 더 많은 레코드가있을 수 있습니다. 나는 성공적으로 아래의 getRecord 기능을 사용하여 함수에서 해당 기록을 반환 할 수 있었다
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;
,하지만 난 명시 적으로 사용하는 객체를 선언해야합니다
예 레코드의 정의는 다음과 같다 함수 내의 각 레코드 유형.
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;
조언, 제안 모든는 감사합니다! 예를 가정
한스,()가 레코드의 인스턴스를 만드는 것을 올바르게 이해합니까? –
예, MyRecord0()은 자동으로 생성 된 레코드 생성자를 호출하여 레코드의 인스턴스를 만듭니다. –