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 {...}} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |