【问题标题】:overwrite or extend a template in an Acceleo template覆盖或扩展 Acceleo 模板中的模板
【发布时间】:2018-01-05 11:43:42
【问题描述】:

我有 3 个模板,例如:-

main, genA, genB

genB 模块是genA 的规范,应该覆盖一个模板bar。问题是,如果你在 genA 中调用被覆盖的模板,它不是genB.中指定的模板

这里是简化的模板:-

主要:-

[module main('http://www.eclipse.org/uml2/5.0.0/UML')]

[import genB /]

[template public generateElement(aClass : Class)]
[comment @main/]
[foo() /][bar() /]
[/template]

genA:-

[module generateA('http://www.eclipse.org/uml2/5.0.0/UML') extends genB]

[template public foo()]
[bar() /]
[/template]

[template public bar()]
barA
[/template]

genB:-

[module generateB('http://www.eclipse.org/uml2/5.0.0/UML') extends genA]

[template public bar() overrides bar]
barB
[/template]

输出为barAbarB,因此genA 内的调用不会被覆盖。 docs 中提到了此行为。覆盖模板的建议方法是什么?

【问题讨论】:

    标签: eclipse templates extend overwrite acceleo


    【解决方案1】:

    “静态覆盖感觉就像在 Java 等面向对象语言中覆盖,但它不同,因为模块不是对象,它们更类似于命名空间” https://wiki.eclipse.org/Acceleo/FAQ#How_does_the_overriding_system_works_in_Acceleo_.3F 您应该尝试使用动态覆盖。

    【讨论】:

      猜你喜欢
      • 2012-02-20
      • 1970-01-01
      • 2011-12-20
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      相关资源
      最近更新 更多