2012-08-25 60 views
3

當前的行爲:斯卡拉IDE調試 「步入」 行爲

  • 將斷點在case Twice(n) ...線。
  • 開「步驟分爲」控制進入x match {
  • 開「步驟分爲」控制進入def TwiceTest = {
  • 在進一步的「步驟分爲」控制進入if (z % 2 == 0)...線。

預期的行爲:

  • 將斷點在case Twice(n) ...線。
  • 在「步入」控制行去if (z % 2 == 0)...行。而與許多嵌套提取的調試Scala程序

代碼段

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調試器以及Java調試器嘗試了這一點,但結果相同。

Step Filtering在這種情況下也沒有幫助。

作爲一種解決方法,我在unapply方法中放置了一個斷點,並從第一個斷點運行了resume。有人可以請建議我一個更清潔的方法。

編輯1 我使用斯卡拉-IDE(最新的每日構建2.1.0.nightly-2_09-201208250315-529cd70。)

Eclipse版本:靛藍服務發佈2版本ID:20120216-1857

操作系統:Windows 7(64位)

+2

你正在使用什麼IDE? –

+0

@ om-nom-nom我將Eclipse Indigo與Scala IDE插件配合使用 – dips

+2

我建議在[scala-ide-user](https://groups.google.com/forum/?fromgroups#!forum/ scala-ide-user) – sschaef

回答

0

字節碼中的行號信息是錯誤的。這不是IDE的問題,而是Scala編譯器。編譯模式匹配時,合成代碼有時會得到錯誤的位置信息。

我假設你使用的是Scala 2.9.2。在下一個版本的Scala(2.10.0)中,模式匹配器有顯着的改進,所以最好嘗試一下。