私は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の右側にはラムダのASTがあります。
リテラルでは機能しないようですので、次のようにします。
val ast : Code[_] = 42
動作しません。
しかし、これはします:
val ast : Code[_] = () => 42
そのためのドキュメントが見つからないようです。暗黙の変換がアクティブになっていないようです。これはどのように作動しますか?