像$read和$iw这样的奇怪名称在具体化表达式中做什么?



下面是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$iw。它们是什么,为什么在那里?

val str ...在REPL中实际上不是区域变量,而是某个对象的属性。请看这个答案

用这样的代码块包装变量定义和reify调用:

{
  val str = ...
  showRaw{reify {...}}
}

相关内容

  • 没有找到相关文章