Domanda

Ho una domanda su come chiamare i metodi di espressione del modello da un'altra espressione del modello.

L'esempio seguente non ha funzionato, cioè.Non espande e "stampa" il codice sul punto in cui è stato chiamato.Come posso modificare questo codice per stampare il risultato del ResourceGenerator().generate(resource) sul punto in cui viene chiamato?Nota che ResourceGenerator().generate(resource) è di per sé un'espressione del modello.

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)]»

          }

       '''

}
.

Spero di essere chiaro nella mia domanda.Un esempio sarebbe fantastico!(Ancora: risorsaGenerator (). Generare restituisce un a pagamento).

È stato utile?

Soluzione

Foreach restituisce sempre nullo e si tratta solo di fare effetti collaterali.Quello che vuoi è una mappa e un join.

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

Ma c'è un modo ancora migliore:

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

Suggerisco di contenere e riutilizzare una singola istanza di risorsaGenerator come campo (usi l'iniezione di dipendenza?) o Make ResourceGenerator :: Genera Static.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top