2011-08-20 46 views
3

這個問題關於scala的保護範圍。以下代碼完美運行。關於在scala中保護[some_scope]和繼承的工作的困惑

//In firstfile.scala 

package A{ 
    class test{ 
    protected[test] var a=0 
    } 
} 

package B{ 
    class test1 extends A.test{ 
    println(a) 
    } 
} 

但是當我把程序包B在其他一些文件,然後編譯失敗說沒有找到值

// In secondfile.scala 

import A.test 
package B{ 
    class test1 extends test{ 
    println(a) 
    } 
} 

我運行在的IntelliJ這個代碼。 這可能是什麼原因?這兩個代碼不一樣嗎?

+0

斯卡拉是否會找到類A.test? –

+0

是的,它編譯得很好,如果我不使用test1類中的'a'字段,所有其他公共測試領域都可以毫無疑問地使用 – codecool

回答

4

我想你已經發現了一個錯誤。我可以在Eclipse中用Scala IDE 2.0.0-beta9 with Scala 2.9.0-1重現它。首先,讓我們創建Foo.scala:

package a 

class Foo { 
    protected[Foo] var x = 0 
} 

然後Bar.scala:

package b 

class Bar extends a.Foo { 
    println(x) // Error: Not found: value x 
} 

Eclipse中告訴我們,有一個錯誤。但清理完一個項目後,這個錯誤消失了。我檢查了一下,用scalac所有的東西都是第一次編譯(誰會懷疑)。

更新:

我在斯卡拉IDE打開錯誤追蹤系統對這個問題一票#1000567

+0

u是指它在intellij IDE中的錯誤? – codecool

+0

@codetool絕對,我找不到另一個解釋。我現在在Scala IDE bugtracker上尋找類似的門票,但是仍然沒有找到任何東西。 – 4e6

+0

票是eclipse中的scala ide。但是我的錯誤在於intellij。我如何報告? – codecool