Devo integrare alcune macro in un progetto che utilizza un motivo a torta. Questo modello ci ha permesso di evitare miliardi di importazioni, tra gli altri vantaggi, quindi vorremmo tenerlo. Ora, stiamo affrontando un problema con alcuni macro sperimentali che abbiamo testato all'esterno del trunk. In primo luogo, mostriamo un manichino sistema denominato torta:È possibile integrare Cake-Pattern e Macro?
trait APiece {
class A
}
trait BPiece { this: APiece =>
def aMacro(a: A): Unit =() /* macro ??? */
}
trait CPiece { this: APiece with BPiece =>
def aMacroInvoker = aMacro(new A)
}
class Cake { this: APiece with BPiece with CPiece => }
testa definisce una classe, BPiece si suppone che sia una macro che utilizza la classe a testa definito, e, infine, CPiece invoca la macro. Ho detto che BPiece avrebbe dovuto essere una macro dato che non ero in grado di codificare un'implementazione per questo. Ho provato diversi modi ma ho sempre in crash con il seguente errore:
"macro implementation must be in statically accessible object"
Leggendo il macros code si può intuire che é necessario racchiudere la macro in un modulo statico. C'è un modo per distribuire una macro che utilizza le strutture di sistema?
Non penso che risolva il suo problema, e non credo che succederà niente. L'essenza del modello di torta - come dovresti sapere! :-): è in grado di scegliere i livelli desiderati nel codice "client". Se 'Macro 'è statico, non puoi cambiarlo a piacimento. È possibile cambiare file di origine o file di classe, ma non è possibile scrivere codice che dice "questo utilizzerà le macro da qui e che utilizzerà le macro da lì". –
Ottimo, penso che sorgeranno nuovi problemi, ma ora posso andare avanti con questa soluzione. Grazie mille!Daniel, il nostro sistema non sarà veramente (modello di torta) puro con i macro. Permetteremo al cliente di decidere se vuole usarli o meno. Quindi, spero che questo sia abbastanza buono. – jeslg
@ DanielC.Sobral I però l'idea era di dichiarare una macro all'interno di una torta. Se si dispone di livelli diversi che definiscono macro che si riferiscono a diverse implementazioni di macro, è possibile alternare tra loro come si desidera e ottenere un comportamento diverso. –