在 XTend 中调用另一个模板表达式
-
12-12-2019 - |
题
我有一个关于从另一个模板表达式调用模板表达式方法的问题。
下面的例子不起作用,即。它不会扩展并在调用它的地方“打印”代码。我如何修改此代码以打印结果 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 静态。
不隶属于 StackOverflow