首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Acceleo收藏集

Acceleo收藏集
EN

Stack Overflow用户
提问于 2015-05-26 00:18:52
回答 1查看 541关注 0票数 0

我已经定义了这个查询

代码语言:javascript
复制
[query public genCascadePath(aCSharpResourceModel : CSharpResourceModel) : Sequence(Sequence(CSharpResourceModel)) =
    aCSharpResourceModel.hasRelatedCSharpRMManager->collect(rmm | rmm.hasRelatedCSharpRModel->asSequence()->prepend(aCSharpResourceModel))
/]

我实际上所做的是:

  1. 从"aCSharpModel“中获取一个序列
  2. 对于这个序列中的每个元素,我将其定义为一个序列,并在另一个元素前面加上一个元素(集合中的rmm.hasRelatedCSharpRModel是无关的,它只是一个1到1的关系)

所以我需要这样的东西:

代码语言:javascript
复制
{element} -> {{element , element1},{element, element2}}

但是,当我尝试从模板访问结果中的每个内部序列时,例如:

代码语言:javascript
复制
[for (path :Sequence(CSharpResourceModel) | aCSharpResourceModelManager.hasRelatedCSharpRModel.genCascadePath())  separator(' -> \n')]
[/for]

我收到一个错误:

org.eclipse.acceleo.engine.AcceleoEvaluationException:无效类型的迭代在第18行的模块TODODbResourceRepositoryCSharpFile为块为(genCascadePath(aCSharpResourceModelManager.hasRelatedCSharpRModel))分隔符(‘-> ')。org.eclipse.emf.ecore.impl.DynamicEObjectImpl不是一个实例序列(CSharpResourceModel)。

如果我尝试对循环执行同样的操作,但是使用迭代器作为CSharpResourceModel而不是Sequence(CSharpResourceModel)类型,它不会产生错误,但是它将查询的结果作为一个单独的序列来处理,就像一个扁平的序列。

问题是,我需要有我描述的行为在一开始。

我怎样才能做到这一点?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 12:06:45

在OCL中,“收集”将使结果变平。如果您不想要一个扁平的结果,则应该使用"collectNested“操作。有关更多信息,请参见Acceleo文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30447602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档