5

以下は、私の Scala プロンプトからの抜粋です。こちらのドキュメントで説明されているように、リフレクション API をインポートし、いくつかの式を具体化してみます。

scala> import scala.reflect.runtime.{universe => ru}
scala> val str = "Duck I says."

scala> ru.showRaw(ru.reify(println(2)))
res40: String = Expr(Apply(Select(Select(This(newTypeName("scala")), 
    newTermName("Predef")), newTermName("println")), List(Literal(Constant(2)))))

scala> ru.showRaw(ru.reify(str.length))    
res41: String = Expr(Apply(Select(Select(Select(Select(Select(Ident($line4), 
    newTermName("$read")), newTermName("$iw")), newTermName("$iw")), 
    newTermName("str")), newTermName("length")), List()))

$line4これらの記号、$read、および2 番目の記号が表示されるとは予想していませんでした$iw。それらは何で、なぜそこにあるのですか?

4

1 に答える 1

5

val str ...in REPL は実際にはロケール変数ではなく、何らかのオブジェクトのプロパティです。この回答を参照してください。

変数定義をラップreifyし、次のようなコード ブロックで呼び出します。

{
  val str = ...
  showRaw{reify {...}}
}
于 2013-05-10T13:23:44.627 に答える