0

A为 部分模型CD为 扩展的模型A。给定一个模型

partial model X
  A a[3];
end X;

我如何实例化 X,例如类似的东西

A X.a = {C,D,C};

更新:我尝试了 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;

失败并显示警告“只能使用默认值设置输入、参数和变量,但已修改 a。” . 另一个是

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;

失败并出现错误“组件 a = {c,b,c},但以前 a = << Empty >>。组件不相同。”

请注意,可以执行以下操作。

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

2 回答 2

2

是的。实例化部分模型而不从非部分模型扩展它是非法的。像这样的东西可能会起作用:

model Y
  extend X(a = {C, D, C});
end Y;

那么雅就是你想要的。

于 2015-04-03T09:36:47.543 回答
1

AFAIK关键字意味着您的partial模型无法实例化,因此您可能也必须使用extendX。

于 2015-04-03T07:31:00.953 回答