1

Modisco KDM メタモデルに基づく EMF モデルを使用しています。Acceleo テンプレートのある時点で、コレクションを反復処理する必要があります。たとえば、次のようになります。

[for (e: AbstractCodeElement | action.codeElement) セパレーター(', ')][e.generateCode() /]

action.codeElement はコレクションであり、modisco の kdm.ecore メタモデルはそれを順序付けされていないと定義しています。

ジェネレーターを実行するたびに、出力が異なる順序で生成されます。シリアル化されたモデル xmi は特定の順序を明確に強制し、モデルを開くたびにモデル エディター (emf デフォルト エディター、modisco エディター) は常に同じ順序を示します (要素が xmi ファイルにシリアル化された順序と一致します)。

kdm.ecore メタモデルを変更してセットを順序付けることはできないため、Acceleo を常に同じ順序で反復させる回避策はありますか?

前もって感謝します

4

2 に答える 2

0

私はあなたができないことを恐れています。それをシーケンスにキャストしてみてください:

action.codeElement->asSequence()

しかし、取得したシーケンスが常に同じ順序でソートされることを保証するものは何もないと思います。

メタモデルがそのように作成されている場合は、理由があるはずです。そのため、メタモデルの作成者に連絡してこの理由を確認するか、何らかの安定した基準で action.codeElement の結果を並べ替える必要があります。

action.codeElement->sortedBy( some OCL expression)
于 2013-12-05T12:57:55.020 に答える