在Acceleo Model to Text转换中,我想为UML类创建一个文件,该文件与包含该类的包(UML模型中的类命名空间)一致。 我面临的问题是我必须按照[file]命令的要求排队,所以我尝试这样的事情
[file ((c.allOwningPackages().name.->sep('/')).concat(c.name.concat('.hpp')),false,'UTF-8')]
但是我在concat上收到了这个错误:
Cannot find operation (concat(String)) for the type (OclAny)
这样做的正确方法是什么?
答案 0 :(得分:1)
不必在与文件块相同的行上执行此操作。完成你想要做的事情的两种常用方法是
对于你的例子,b)会给出类似的东西:
[template public myMainTemplate(c : uml::Class)]
[file (getpackage(c), false, 'UTF-8')]
...
[/file]
[/template]
[template private getPackage(c : uml::Class) post(trim())]
[c.ancestors()->reverse()->sep('/')->including(c.name.concat('.hpp'))/]
[/template]
请注意,对于集合,使用“ - >包括”代替“ .concat ”,这就是您收到错误消息的原因。当然,这只是将所有内容都放在一个表达式中。它可能更具可读性:
[template private getPackage(c : uml::Class) post(trim())]
[c.ancestors()->reverse()->sep('/')/]/[c.name/].hpp
[/template]