2

我有一个关于从另一个模板表达式调用模板表达式方法的问题。

下面的例子不起作用,即。它不会在调用它的地方扩展和“打印”代码。如何修改此代码以ResourceGenerator().generate(resource)在调用它的地方打印结果?请注意,ResourceGenerator().generate(resource)它本身就是一个模板表达式。

class ServerGenerator extends RESTServiceGenerator {
       def generate(Server it) '''
          package nl.sytematic.projects.RESTServiceServlet;
          import javax.ws.rs.GET;
          import javax.ws.rs.Path;
          import javax.ws.rs.Produces;
          import javax.ws.rs.core.MediaType;


          @Path("«it.baseURI»")
          public class «it.name» {
              «it.resources.forEach[ resource |new ResourceGenerator().generate(resource)]»

          }

       '''

}

希望我的问题很清楚。一个例子会很棒!(同样:ResourceGenerator().generate 返回一个 CharSequence)。

4

1 回答 1

6

forEach 总是返回 null 并且只是在做副作用。你想要的是一张地图和一个连接。

it.resources.map(resource |new ResourceGenerator().generate(resource)).join

但是还有一个更好的方法:

«FOR resource : resources»
  «new ResourceGenerator().generate(resource)»
«ENDFOR»

我建议保留和重用 ResourceGenerator 的单个实例作为字段(您使用依赖注入吗?)或使 ResourceGenerator::generate 静态。

于 2012-10-01T17:07:08.793 回答