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 の 1 つのインスタンスをフィールドとして保持して再利用するか (依存性注入を使用しますか?)、ResourceGenerator::generate を静的にすることをお勧めします。

于 2012-10-01T17:07:08.793 に答える