3

当前行为:

  • 在行上放一个断点case Twice(n) ...
  • 在“步入”时,控制进入x match {线
  • 在“步入”时,控制进入def TwiceTest = {线
  • 在进一步“步入”时,控制进入if (z % 2 == 0)...线路。

预期行为:

  • 在行上放一个断点case Twice(n) ...
  • 在“步入”时,控制进入if (z % 2 == 0)...线路。

代码片段

object testobj extends App {
  def TwiceTest = {
    val x = Twice(21)
    x match {
      case Twice(n) => Console.println(n)
    } // prints 21
  }

  TwiceTest

}

object Twice {
  def apply(x: Int): Int = x * 2
  def unapply(z: Int): Option[Int] = {
    if (z % 2 == 0) Some(z / 2) else None
  }
}

在调试具有大量嵌套提取器的 scala 程序时,当前的行为令人恼火。我用新的 Scala 调试器和 Java 调试器尝试了这个,但结果相同。

Step Filtering在这种情况下也无济于事。

作为一种解决方法,我在unapply方法中放置一个断点并resume从第一个断点运行。有人可以建议我一个更清洁的方法。

编辑 1 我正在使用 Scala-IDE(最新的夜间版本。2.1.0.nightly-2_09-201208250315-529cd70)

Eclipse 版本:Indigo Service Release 2 构建 ID:20120216-1857

操作系统:Windows 7(64 位)

4

1 回答 1

0

字节码中的行号信息错误。这不是 IDE 的问题,而是 Scala 编译器的问题。编译模式匹配时,合成代码有时会得到错误的位置信息。

我假设您使用的是 Scala 2.9.2。在 Scala 的下一个版本(2.10.0)中,模式匹配器有了显着的改进,所以不妨试一试。

于 2012-08-27T11:57:28.503 回答