1

私は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

そのためのドキュメントが見つからないようです。暗黙の変換がアクティブになっていないようです。これはどのように作動しますか?

4

0 に答える 0