W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
當(dāng)我們把代碼以層次關(guān)系放到包中時(shí),它不僅僅可以幫助人們?yōu)g覽代碼,同時(shí)也說明了同一包中的代碼具有某些相關(guān)性。Scala 可以利用這些相關(guān)性來簡化代碼引用,比較使用短名稱,而無需使用包的全路徑來訪問類定義。
下面我們給出三個(gè)簡單的例子:
package bobsrockets{
package navigation{
class Navigator{
var map =new StarMap
}
class StarMap
}
class Ship {
val nav= new navigation.Navigator
}
class fleets{
class Fleet{
def addShip() {new Ship}
}
}
}
在第一個(gè)例子中,正如你可以預(yù)見的一樣,訪問同一包中定義的類型,無需使用前綴,直接使用類型的名稱即可訪問,也就是本例可以直接使用 new StarMap。類 StarMap 和 Navigator 定義在同一個(gè)包中。
第二個(gè)例子,嵌套的 package 也可以在其父包中被同級別的其它類型直接訪問,而無需使用全稱,因此第二個(gè)例子可以使用 navigation 來直接訪問 navigation 包,而無需添加 bobsrockets。
第三個(gè)例子,但使用包定義的{}語法結(jié)構(gòu)時(shí),內(nèi)層的類型可以直接訪問其外層定義的類型,因此在類 Fleet 中可以直接訪問外層定義的類型 Ship。
要注意的是這種用法只適用于你明確嵌套包定義,如果你采用 Java 語言風(fēng)格-一個(gè)文件定義一個(gè)包,那么你只能訪問該包中定義的類型。
訪問包定義的類型還有一個(gè)技巧值得說明一下,比如你定義了一些類型之間可能存在相互隱藏的關(guān)系,也就是內(nèi)層定義的同名類型可能會隱藏外層定義的同名類型,那么你怎么來訪問外層定義的類型呢?請看下例:
package launch{
class Booster3
}
package bobsrockets{
package navigtion{
package launch{
class Booster1
}
class MissionControl{
val booster1 =new launch.Booster1
val booster2=new bobsrockets.launch.Booster2
val booster3=new _root_.launch.Booster3
}
}
package launch{
class Booster2
}
}
如何來訪問 Booster1,Booster2,和 Booster3 呢?訪問 Booster1 比較容易,Booster2 可以通過全稱來訪問。那么如何訪問最外層的 Booster3 呢?內(nèi)層的包 launch 隱藏了這個(gè)外部的同名包。為解決這種情況,Scala 提供了_root_,也就是所有最外層的類型都可以當(dāng)成定義在_root_包中。因此 _root_.launch.Booster3 可以訪問最外層定義的類型。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: