当前行为:
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 Build id:20120216-1857
操作系统:Windows 7(64位)
答案 0 :(得分:0)
字节码中的行号信息错误。这不是IDE的问题,而是Scala编译器。编译模式匹配时,合成代码有时会得到错误的位置信息。
我假设您使用的是Scala 2.9.2。在Scala的下一个版本(2.10.0)中,模式匹配器有了显着的改进,所以尝试一下会很好。