1.包
Scala包的命名方式有兩種。一種和Java一樣,通過把package子句放在文件頂端的方式,把整個文件的內容放進包里。如:
package scala.actors.Actor
另一種方式可以在package子句之后把要放到包里的定義用花括號括起來。如:
package bobsrockets{ package navigation{ //在bobsrockets.navigation包中 class Navigator package tests{ //在bobsrockets.navigation.tests包中 class NavigatorSuite } } }
另外,Scala在所有用戶可創建的包之外提供了名為_root_的包,即任何你能寫出來的頂層包都被當做是_root_包的成員。如:
//文件launch.scala package launch{ class Booster3 } //文件bobsrockets.scala package bobsrockets{ package navigation{ 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 } } }
2.引用
Scala的import與Java的import的差異:
可以出現在任何地方;
可以指的是(單利或正統的)對象或包
可以重命名或隱藏一些被引用的成員
e.g
//只引用linalg中的DenseMatrix和DenseVector import breeze.linalg.{DenseMatrix, DenseVector} //將DenseMatrix重命名為BDM import breeze.linalg.{DenseMatrix => BDM, DenseVector} //引用linalg中的所有成員 import breeze.linalg._ //引用linalg中除了DenseMatrix的所有成員 import breeze.linalg.{DenseMatrix => _, _}
Scala的import的使用規則:
簡單名x。把x包含進引用名集合;
重命名子句x => y。讓名為x的成員以名稱y出現;
隱藏子句x => _。把x排除在引用名集合之外;
全包括“_”。引用除了前面子句提到的之外的全體成員。如果存在全包括,那么必須是引用選擇的最后一個。
另外,“.scala”文件都隱式的添加了如下引用:
import java.lang._ import scala._ import Predef._
3.訪問修飾符
Scala和Java修飾符的不同點,如下表:
保護的作用域
Scala里的訪問修飾符可以通過使用限定詞強調。格式為private[X]或protected[X]的修飾符表達“直到”X的私有或保護,這里X指代某個所屬的包、類或單例對象。
特例:被private[this]標記的定義僅能在包含了定義的同一個對象中被訪問。
參考文獻:
《Scala編程》