2014-02-12 68 views
2

我看到一個名稱綁定的測試用例,這讓我去了嗎?所以這裏是簡單規則的一個回顧。我確定這已經在許多博客文章和SO問題中進行了審查。再次說明命名優先順序?我是一種有約束力

測試用例對象Top確保PrimaryKey不明確。

「咦?」我認爲進口是「較低優先級」。爲什麼不應該編譯?

爲什麼它只是大括號內的問題(請參閱X2)?

package imps 

object X { 
    object Y { 
    val Z = 7 
    } 
    object A { 
    val Z = 9 
    import Y.Z 
    println(Z) 
    } 
} 

object X2 { 
    object Y { 
    val Z = 7 
    } 
    object A { 
    val Z = 9 
    locally { 
     import Y.Z 
     println(Z) 
    } 
    } 
} 

object Top { 
    object ColumnOption { 
    object PrimaryKey 
    } 

    class A { 
    def PrimaryKey: Any = ??? 

    { 
     import ColumnOption._ 

     (null: Any) match { case PrimaryKey => } 

     PrimaryKey // was already ambigious in 2.10.3 
    } 
    } 
} 
+0

對於「正在*綁定*」中的名稱綁定優先級爲+1:D。 –

回答

1

這是規範第2章開頭的簡單例證。出於某種原因,我沒有內化它,所以這裏是外化的。

測試用例對象Top確保PrimaryKey不明確。

我認爲進口是一個「低優先級」,所以我試着編譯X

但是在嵌套範圍內,請參閱X2,導入變得不明確。

原因是在一個範圍內,見X,本地Z優先於進口Z

但是在嵌套範圍內,val Z不再侷限於範圍,因此它在「範圍內」而不是「本地」範圍。此外,導入的Z不會影響它,因爲它具有較低的優先級。因此,關於模糊的Z的錯誤。