加速 Collection,共 Collection 秒
Acceleo Collection of Collections
我已经定义了这个查询
[query public genCascadePath(aCSharpResourceModel : CSharpResourceModel) : Sequence(Sequence(CSharpResourceModel)) =
aCSharpResourceModel.hasRelatedCSharpRMManager->collect(rmm | rmm.hasRelatedCSharpRModel->asSequence()->prepend(aCSharpResourceModel))
/]
我实际做的是:
从 "aCSharpModel"
中获取一个序列
对于这个序列中的每一个元素,我都将其定义为一个序列,并在前面加上另一个元素(collect里面的rmm.hasRelatedCSharpRModel
是无关紧要的,只是一对一的关系)
所以我需要这样的东西:
{element} -> {{element , element1},{element, element2}}
但是当我尝试访问模板结果中的每个内部序列时,例如:
[for (path :Sequence(CSharpResourceModel) | aCSharpResourceModelManager.hasRelatedCSharpRModel.genCascadePath()) separator(' -> \n')]
[/for]
我收到一个错误:
org.eclipse.acceleo.engine.AcceleoEvaluationException: Invalid type for iteration at line 18 in Module TODODbResourceRepositoryCSharpFile for block for (genCascadePath(aCSharpResourceModelManager.hasRelatedCSharpRModel)) separator(' -> '). org.eclipse.emf.ecore.impl.DynamicEObjectImpl was not an instanceof Sequence(CSharpResourceModel).
如果我尝试执行相同的 for 循环,但迭代器类型为 CSharpResourceModel
而不是 Sequence(CSharpResourceModel)
,它不会产生错误,但它将我的查询结果视为单个序列,就像一个扁平的序列。
问题是我需要有我在开始时描述的行为。
我怎样才能做到这一点?
谢谢。
在 OCL 中,"collect" 会使结果变平。如果您不想要扁平化的结果,则应使用 "collectNested" 操作。有关详细信息,请参阅 Acceleo documentation。
我已经定义了这个查询
[query public genCascadePath(aCSharpResourceModel : CSharpResourceModel) : Sequence(Sequence(CSharpResourceModel)) =
aCSharpResourceModel.hasRelatedCSharpRMManager->collect(rmm | rmm.hasRelatedCSharpRModel->asSequence()->prepend(aCSharpResourceModel))
/]
我实际做的是:
从 "aCSharpModel"
中获取一个序列
对于这个序列中的每一个元素,我都将其定义为一个序列,并在前面加上另一个元素(collect里面的
rmm.hasRelatedCSharpRModel
是无关紧要的,只是一对一的关系)
所以我需要这样的东西:
{element} -> {{element , element1},{element, element2}}
但是当我尝试访问模板结果中的每个内部序列时,例如:
[for (path :Sequence(CSharpResourceModel) | aCSharpResourceModelManager.hasRelatedCSharpRModel.genCascadePath()) separator(' -> \n')]
[/for]
我收到一个错误:
org.eclipse.acceleo.engine.AcceleoEvaluationException: Invalid type for iteration at line 18 in Module TODODbResourceRepositoryCSharpFile for block for (genCascadePath(aCSharpResourceModelManager.hasRelatedCSharpRModel)) separator(' -> '). org.eclipse.emf.ecore.impl.DynamicEObjectImpl was not an instanceof Sequence(CSharpResourceModel).
如果我尝试执行相同的 for 循环,但迭代器类型为 CSharpResourceModel
而不是 Sequence(CSharpResourceModel)
,它不会产生错误,但它将我的查询结果视为单个序列,就像一个扁平的序列。
问题是我需要有我在开始时描述的行为。
我怎样才能做到这一点?
谢谢。
在 OCL 中,"collect" 会使结果变平。如果您不想要扁平化的结果,则应使用 "collectNested" 操作。有关详细信息,请参阅 Acceleo documentation。