2

我对 Set 或变量的定义有疑问。

在以下代码中:

[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”包括代理,我不想打印一些东西。但我想将代理存储在一个集合中。谁能帮我?谢谢

4

2 回答 2

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]
于 2015-02-06T10:52:22.680 回答
0

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

只需这样做,例如:

[for (agentClass : AgentClass | d.ownedHazard.entity->filter(AgentClass))]
  (... here, generate something with agentClass ...)
[/for]
于 2014-09-01T13:59:57.153 回答