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.
To zbyt skomplikowane. To znaczy 'zależy-na << = (wszystko, wymienione, tutaj)' – pfn