我在玩 scala 提升,我偶然发现 Scala 似乎对 lambda 表达式有某种隐式支持。
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 将在右侧具有 lambda 的 AST。
它似乎不适用于文字,所以:
val ast : Code[_] = 42
不起作用。
但这确实:
val ast : Code[_] = () => 42
我似乎无法找到它的文档。似乎没有任何隐式转换处于活动状态。这是如何运作的?