Работает ли 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

Я не могу найти документацию для этого. Кажется, что неявное неактивное преобразование активно. Как это работает?

0 ответов

Другие вопросы по тегам