Позвольте A
быть частичной моделью и C
, D
быть моделями, которые распространяются A
. С учетом моделиModelica массив частичной модели
partial model X
A a[3];
end X;
Как я могу создать экземпляр X, например. что-то вдоль линий
A X.a = {C,D,C};
Update: Я пробовал 2 варианта. Одним из них является
package P
partial model A end A;
model B extends A; end B;
model C extends A; end C;
partial model X
A a[3];
end X;
model Y extends X(a={c,b,c});
B b;
C c;
end Y;
end P;
, который завершается с предупреждением «Может только набор входов, параметры и переменные с по умолчанию, но модифицировали.». Другой является
package P
partial model A end A;
model B extends A; end B;
model C extends A; end C;
partial model X
replaceable A a[3];
end X;
model Y extends X;
redeclare A a={c,b,c};
B b;
C c;
end Y;
end P;
, который завершается с ошибкой «Компонент А = {с, Ь, с}, но ранее а = < < Пустые >>. Компоненты не являются идентичными.»
Обратите внимание, что это возможно.
package P
partial model A end A;
model B extends A; end B;
model C extends A; end C;
partial model X
A a[3] = {a1,a2,a3};
replaceable A a1,a2,a3;
end X;
model Y extends X;
redeclare B a1;
redeclare C a2;
redeclare B a3;
end Y;
end P;
Но я хочу P.X
использовать параметрический массив. Опять же, следующая идея достичь этого не работает.
package P
partial model A end A;
model B extends A; end B;
model C extends A; end C;
partial model X
parameter Integer N;
replaceable A a[N] = fill(ai,N);
A ai;
end X;
model Y extends X(N=3);
redeclare A a[3] = {b,c,b};
B b;
C c;
end Y;
end P;
Вам действительно нужно, чтобы 'A' был' partial'? Ваш последний пример компилируется, если вы удаляете ключевое слово 'partial' до' model A end A; '. Объявление 'A' как' partial', а затем инициализация его с помощью A A [...] 'является противоречием. – Tobias
Вы правы, это противоречие. Тем не менее, я бы хотел, чтобы A был частичным, поскольку он должен действовать как абстрактный абстрактный тип, который не должен быть создан. У вас есть идея, как это сделать в Modelica? – Mathabc