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

如何获取Scala ToolBox以查看REPL定义?

发布时间:2020-12-16 09:11:37 所属栏目:安全 来源:网络整理
导读:当反思仍然开始时,在 Scala 2.10.0里程碑的日子里,我 asked a question关于我如何使用它来查看REPL中的代码片段的树.好的答案比我问的更为深刻,并展示了如何用来分析和评估树木,所以我继续尝试在今天进行的一个小项目中使用它. 不幸的是,代码解析和评估似乎
当反思仍然开始时,在 Scala 2.10.0里程碑的日子里,我 asked a question关于我如何使用它来查看REPL中的代码片段的树.好的答案比我问的更为深刻,并展示了如何用来分析和评估树木,所以我继续尝试在今天进行的一个小项目中使用它.

不幸的是,代码解析和评估似乎没有看到任何REPL定义:

scala> val x = 1
x: Int = 1

scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox

scala> val tb = scala.reflect.runtime.universe.runtimeMirror(
  getClass.getClassLoader).mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = ...

scala> tb.eval(tb.parse("x"))
scala.tools.reflect.ToolBoxError: reflective compilation has failed:

not found: value x

有没有办法让它识别在REPL上做出的定义?

解决方法

最近我挖了一下,当试图让它支持类型宏,所以我有能力解释为什么它不起作用.让它工作将是下一步:)

我知道你知道在编译之前输入的每个片段都被包装在一些样板中.因此,x最终是一个具有奇怪名称的包中的嵌套嵌套嵌套对象中的字段.

显然,repl将跟踪所有定义的符号,然后将必要的导入与其生成的样板一起注入.因此后续行可以看到x不合格.相比之下,工具箱只是重复使用repl的类加载器,但不要对导入做任何事情,因此失败.

解决办法是以某种方式到达表示repl的对象,询问有关定义的符号,然后生成相应的导入到您提供给工具箱的代码.如果您提交了机票,我将尝试在2.10.1代码冻结疯狂结束(据称本周结束)之后编写一个解决方法.

(编辑:李大同)

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

    推荐文章
      热点阅读