我有一个关于从另一个模板表达式调用模板表达式方法的问题。
以下示例不起作用,即。它不会扩展并在被调用的位置“打印”代码。如何修改此代码以在调用它的位置打印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)。
答案 0 :(得分:6)
forEach总是返回null,只是做副作用。你想要的是地图和连接。
it.resources.map(resource |new ResourceGenerator().generate(resource)).join
但还有更好的方法:
«FOR resource : resources»
«new ResourceGenerator().generate(resource)»
«ENDFOR»
我建议保持并重用一个ResourceGenerator实例作为字段(你使用依赖注入吗?)或者使ResourceGenerator :: generate static。