我对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"包括代理商,我不想印刷东西。但我想将代理商存放在一套。 谁能帮我? 感谢
答案 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]