到目前為止,我們看到的添加到包的都是類(lèi)型,Trait 和單例對(duì)象(Object)。這些都是指包的定級(jí)層次定義的類(lèi)型。Scala 的定級(jí)層次除了可以定義類(lèi),Trait,Object 之外,其它可以在類(lèi),Trait,Object 內(nèi)部定義的類(lèi)型,也都可以直接定義在包中,比如一些通用的函數(shù),變量,你都可以直接定義在包中。
在 Scala 中,可以把這些函數(shù)或方法放在一個(gè)稱(chēng)為“包對(duì)象”中。每個(gè)包只有一個(gè)包對(duì)象,任何放在包對(duì)象的類(lèi)型都可以認(rèn)為是包自身的成員。
例如:
//in file bobsdelights/package.scala
package object bobsdelights{
def showFruit(fruit: Fruit){
import fruit._
println(name + "s are " + color)
}
}
//in file PrintMenu.scala
package printmenu
import bobsdelights.Fruits
import bobsdelights.showFruit
object PrintMenu{
def main(args:Array[String]){
for(fruit <- Fruits.menu){
showFruit(fruit)
}
}
}
本例中對(duì)象 PrintMenu 可以引入包對(duì)象中定義的函數(shù) showFruit,方法和引入一個(gè)類(lèi)定義一樣,也是通過(guò) import 語(yǔ)句。
包對(duì)象通常被編譯為 package.class,其包名為定義的包。所有按照慣例一般包對(duì)象定義放在 package.scala 中,比如上面的包對(duì)象可以放在 bobsdelights 目錄下的 package.scala 中。