Работает ли reification выражений scala в v2.9?
Я поиграл с подъемом scala и случайно обнаружил, что в Scala, похоже, есть какая-то неявная поддержка лямбда-выражений.
import scala.reflect.Code
import scala.reflect.Function
import scala.reflect.Select
object Test {
trait Foo {
def aMethod : String
}
val ast : Code[_] = (f:Foo) => f.aMethod
//now you can pattern match the AST
val Function(_, Select(_, symbol))= ast.tree
val nameOfAMethod = symbol.name
println(nameOfAMethod) //prints "aMethod"
}
АСТ будет иметь AST для лямбды на правой стороне.
Кажется, не работает для литералов, так что:
val ast : Code[_] = 42
не работает.
Но это делает:
val ast : Code[_] = () => 42
Я не могу найти документацию для этого. Кажется, что неявное неактивное преобразование активно. Как это работает?