加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala反射:什么是奇怪的名字,比如$read和$iw在reified表达式中

发布时间:2020-12-16 18:16:03 所属栏目:安全 来源:网络整理
导读:以下是我的 Scala提示中的一些片段.我导入反射API并尝试重新表达一些表达式,如 docs here中所述. scala import scala.reflect.runtime.{universe = ru}scala val str = "Duck I says."scala ru.showRaw(ru.reify(println(2)))res40: String = Expr(Apply(Sel
以下是我的 Scala提示中的一些片段.我导入反射API并尝试重新表达一些表达式,如 docs here中所述.

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("str")),newTermName("length")),List()))

我没想到在第二个中看到这些符号$line4,$read和$iw.他们是什么,他们为什么在那里?

解决方法

在REPL中,val str …实际上不是一个locale变量,而是一个对象的属性.见 this answer.

使用代码块包装变量定义和reify调用,如下所示:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读