2016-05-08 17 views
6

Widzę ten symbol <<= w partii kodu SBT, ale nie wiem, co robi.Co oznacza `<< =` w SBT?

Próbowałem googling dla tego symbolu, ale nie otrzymałem żadnych odpowiedzi.

Czy możesz wskazać mi jakąś dokumentację lub przykład, który jasno wyjaśnia, co oznacza ten symbol i co robi?

Odpowiedz

0

Och, głębokie wyjaśnienie jest dość skomplikowane.

Zasadniczo, podpis jest:

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

Więc to wymaga tego makra:

/* 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) 

już używany tego rodzaju operatora gdy ma do czynienia z AspectJ kompilacji:

products in Compile <<= products in Aspectj 

Zasadniczo oznacza to: podstaw źródło kodu na plikach źródłowych AspectJ (wygenerowane za pomocą plugin), a nie klasyczne.

Interpretuję to jako rodzaj "replaceAll/erase":
Zamień kilka plików do kompilacji za pomocą plików zawierających adnotacje AspectJ.

+3

To zbyt skomplikowane. To znaczy 'zależy-na << = (wszystko, wymienione, tutaj)' – pfn

4

Oprócz pfn's comment, jest to opisane w dokumentach 0.12 pod numerem More Kinds of Settings. Przypuszczam, że został usunięty z dokumentów 0.13, ponieważ to samo zachowanie można teraz zdefiniować pod kątem :=.