2016-05-08 15 views
6

Ich sehe dieses <<= Symbol in vielen SBT-Code, aber ich weiß nicht, was es tut.Was bedeutet `<< =` in SBT?

Ich habe versucht, für dieses Symbol zu googeln, aber ich habe keine Antworten bekommen.

Können Sie mir bitte auf eine Dokumentation verweisen oder ein Beispiel, das klar erklärt, was dieses Symbol bedeutet und was es tut?

Antwort

0

Oh, die tiefe Erklärung ist ziemlich kompliziert.

Grundsätzlich ist die Signatur:

def <<= (app: Initialize[Task[S]]): Setting[Task[S]] = macro std.TaskMacro.itaskAssignPosition[S] 

So ist es diesen Makro beinhaltet:

/* Implementations of <<= macro variations for tasks and settings. These just get the source position of the call site.*/ 

    def itaskAssignPosition[T: c.WeakTypeTag](c: Context)(app: c.Expr[Initialize[Task[T]]]): c.Expr[Setting[Task[T]]] = 
     settingAssignPosition(c)(app) 

ich diese Art des Betreibers bereits verwendet, wenn mit AspectJ Kompilierung zu tun:

products in Compile <<= products in Aspectj 

Grundsätzlich bedeutet dies: Basis die Quelltextquelle auf den AspectJ Quelldateien (generiert mit einem plugin), nicht die klassischen.

Ich interpretiere es als eine Art "replaceAll/Erase":
Ersetzen Haufen von Dateien, um von den Dateien mit AspectJ Anmerkungen zu kompilieren.

+3

Viel zu kompliziert. Es bedeutet "hängt ab von << = (alles, aufgeführt, hier)" – pfn

4

Weiter zu pfn's comment ist dies in der 0.12 docs unter More Kinds of Settings beschrieben. Ich denke, es wurde von der 0.13 docs fallen gelassen, weil das gleiche Verhalten jetzt in Bezug auf := definiert werden kann.