首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制Acceleo在每次执行模板时以相同的顺序遍历集合?

如何强制Acceleo在每次执行模板时以相同的顺序遍历集合?
EN

Stack Overflow用户
提问于 2013-12-04 04:25:48
回答 2查看 1.6K关注 0票数 2

我正在使用基于Modisco元模型的EMF模型。在Acceleo模板的某个点,我需要迭代一个集合,例如:

用于(e: AbstractCodeElement \ action.codeElement)分隔符(‘,')

action.codeElement是一个集合,modisco的kdm.ecore元模型将其定义为无序的。

每次我运行我的生成器时,输出都会以不同的顺序生成。Cleary序列化模型xmi强制执行特定的顺序,每个模型编辑器(emf默认编辑器、modisco编辑器)--我打开模型--总是显示相同的顺序(匹配将元素序列化到xmi文件的顺序)。

由于我无法更改kdm.ecore元模型以使集合有序,那么是否有办法让Acceleo始终在相同的顺序上迭代?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-05 12:57:55

恐怕你做不到。试着把它演成一个序列:

代码语言:javascript
复制
action.codeElement->asSequence()

但我认为没有什么能保证你得到的序列总是按照相同的顺序排序。

如果元模型是这样建立的,那么应该有一个原因,所以您可以联系元模型的作者来检查这个原因,或者您应该用一些稳定的标准对action.codeElement的结果进行排序:

代码语言:javascript
复制
action.codeElement->sortedBy( some OCL expression)
票数 0
EN

Stack Overflow用户

发布于 2015-01-05 13:49:59

我不知道有什么干净的方法。我通过更改子元素的name属性来解决这个问题,以便按我想要的方式按字母顺序排序。

每次我都希望插槽的顺序相同,所以我更改了每个插槽的“值”子名。

名字看起来像:"01_id“、"02_username”、"03_city“、. "10_instructions”、"11_contact“。我不需要更改"value“元素所包含的内容,只需要更改它们的名称,无论如何我都不会将它们用于任何事情。希望这能有所帮助。

代码语言:javascript
复制
[for (s : Slot | instanceSpecification.slot->select(definingFeature.name = 'column')->sortedBy(value->asSequence()->first().name)]
    ... do work here ...
[/for]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20366831

复制
相关文章

相似问题

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