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

下面的例子不起作用,即。它不会扩展并在调用它的地方“打印”代码。我如何修改此代码以打印结果 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)。

有帮助吗?

解决方案

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

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

但还有一个更好的方法:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top