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;

これは、 「入力、パラメーター、および変数はデフォルトでのみ設定できますが、変更されている可能性があります」という警告で失敗します。. もう一つは

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;

「Component a = {c,b,c}, but before a = << Empty >>. The components are not同一.」というエラーで失敗します。

次のことが可能であることに注意してください。

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;

それからあなたが望むものはYaです。

于 2015-04-03T09:36:47.543 に答える