Sto realizzando un DSL.
Ho un package con il dominio del mio modello, ed un altro package dove implemento il DSL.
Per ogni classe concreta del mio modello creo un file object nel package del dsl con le regole che definiscono la sintassi per la classe concreta.
Il problema è che questo object contiene più di una classe, dove ogni classe mi definisce un metodo (che in sostanza è una regola per la mia sintassi.) Non posso eliminare le classe.
Quindi quando nel main voglio usare il mio DSL devo importare i singoli object oltre al package del dominio. Per esempio:
import a0Dominio._
import a0DSL._
import a0DSL.ComponentDSL._
import a0DSL.AddFunction._
import a0DSL.GroupDSL._
import.....e molti altri
Come posso ridurre tutti questi import.
Posso dichiararli tutti in un altro object e poi importare solo quella? NO, non và.
Esiste una soluzione a questo inconveniente?
Ciao Ivano, come sempre grazie mille per la risposta.
Non mi è chiaro bene il concetto della “delegazione”.
In poche parole dovrei assegnare nuovi nomi ai metodi e classi che voglio importare?
val C2 = "C2" sacomponent "Questa è la descrizione di C2"
C2 with_properties List(P1, P2)
val I3 = "I3" sainterface "Questa è la descrizione di I3"
I3 with_properties Nil
Il punto ora è questo:
Nel main io devo importare:
import a0Dominio._
import a0DSL.ComponentDSL._
import a0DSL.SAInterfaceDSL._
Volendo ridurre le ultime due istruzioni di import in una sola. Come creo il mio object contenitore?
In sostanza a me serve rendere visibile solo i seguenti metodi:
sacomponent
saconnector
with_properties -> di ComponentDSL
sainterface
with_properties -> di SAInterfaceDSL