Acceleo中set的定义错误

时间:2014-08-25 05:18:30

标签: set acceleo

我对Set或variable的定义有疑问。

在以下代码中:

[template public generateElement(d : DangerClass){ a:Set(AgentClass)=Set{};}]
[comment @main/]
[file (d.name + '.java', false, 'UTF-8')]
[for (h:Hazard | d.ownedHazard)]
[for (e:Element | h.entity) ]
[if (e.oclIsKindOf(AgentClass)) {a->including(e);}][/if]
[/for]
[/for]
[/file]
[/template]

错误"。预期而不是{"显示。(第6行) 如果我写" [for(e:Element | h.entity){a->包括(e);}]"错误"变量a->包括(e);无效"将显示。 我想定义一个集合(" a"作为Set(AgentClass))" a"包括代理商,我不想印刷东西。但我想将代理商存放在一套。 谁能帮我? 感谢

2 个答案:

答案 0 :(得分:2)

如果您只想将代理存储在一个集合中(无原子显示),则可以使用let来定义可在其他表达式中使用的变量:

[template public generateElement(d : DangerClass)]
[comment @main/]
[file (d.name + '.java', false, 'UTF-8')]
[let a : Set(AgentClass) = d.ownedHazard.entity->filter(AgentClass)->asSet()]
  ... handle 'a' in your future requests
[/let]
[/file]
[/template]

答案 1 :(得分:0)

变量在acceleo和OCL中是不可变的。

就这样做,例如:

[for (agentClass : AgentClass | d.ownedHazard.entity->filter(AgentClass))]
  (... here, generate something with agentClass ...)
[/for]