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

调试 – 如何编写将允许放入解释器的Scala 2.9代码

发布时间:2020-12-16 09:16:15 所属栏目:安全 来源:网络整理
导读:我不知道如何编写可以放入 Scala 2.9代码的解释器的代码.这个问题是后续的 this one,它询问Scala的等价物, import pdbpdb.set_trace() 来自Python.给出的建议主要是针对Scala 2.8,相关的软件包不再存在于以前的表单中.也就是说, scala.nsc.tools.nsc.Interpr
我不知道如何编写可以放入 Scala 2.9代码的解释器的代码.这个问题是后续的 this one,它询问Scala的等价物,

import pdb
pdb.set_trace()

来自Python.给出的建议主要是针对Scala 2.8,相关的软件包不再存在于以前的表单中.也就是说,

> scala.nsc.tools.nsc.Interpreter.{break,breakIf}已被移动到scala.nsc.tools.nsc.interpreter.ILoop.{break,breakIf}
> DebugParam现在是scala.tools.nsc.interpreter中的NamedParam

如原始帖子中所述,父进程的类路径不会自动传递给新的解释器,所以解决方法已经被提交here.不幸的是,许多在这里调用的类/方法现在已经改变了,我不是确定如何修改代码行为“预期”.

谢谢!

编辑:这是我的测试代码,在当前的编译和运行,但尝试在调试器中执行任何操作会导致应用程序冻结,如果由scalac编译并由scala执行

import scala.tools.nsc.interpreter.ILoop._

object Main extends App {

  case class C(a: Int,b: Double,c: String) {
    def throwAFit(): Unit = {
      println("But I don't wanna!!!")
    }
  }

  // main
  override def main(args: Array[String]): Unit = {

    val c = C(1,2.0,"davis")

    0.until(10).foreach {
      i => 
        println("i = " + i)
        breakIf(i == 5)
    }
  }
}

EDIT2:由于我目前的设置是通过sbt运行的,我发现这个主题已经被覆盖在in the FAQ(页面底部).然而,我不明白所给出的解释,对MyType的任何澄清都是无价的.

EDIT3:没有解决方案的话题的另一个讨论:http://permalink.gmane.org/gmane.comp.lang.scala.simple-build-tool/1622

解决方法

所以我知道这是一个老问题,但如果你的REPL挂起来,我想知道问题是 you need to supply the -Yrepl-sync option吗?当我的嵌入式REPL挂在类似的情况下,就解决了它.

要在嵌入式REPL中设置-Yrepl-sync,而不是使用breakIf,则需要使用work with the ILoop directly,以便您可以访问“设置”对象:

// create the ILoop
val repl = new ILoop
repl.settings = new Settings
repl.in = SimpleReader()

// set the "-Yrepl-sync" option
repl.settings.Yreplsync.value = true

// start the interpreter and then close it after you :quit
repl.createInterpreter()
repl.loop()
repl.closeInterpreter()

(编辑:李大同)

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

    推荐文章
      热点阅读