Scala 使用 import

2018-09-28 18:18 更新

使用 import

和 Java 一樣,Scala 也是通過(guò) import 語(yǔ)句引用其它包中定義的類型,類型引入后,可以使用短名稱來(lái)引用該類型而無(wú)需使用全路徑。要注意的 Scala 使用“_” 而非”*”作為通配符。

//easy access to Fruit
import bobsdelights.Fruit
//easy access to all members of bobdelights
import bobsdelights._
//easy access to all member of Fruits
import bobsdelights.Fruits._

所定義的類型中包 bobsdelights 中:

package bobsdelights
abstract class Fruit(
  val name: String,
  val color:String
)
object Fruits{
  object Apple extends Fruit ("apple","red")
  object Orange extends Fruit("orange","orange")
  object Pear extends Fruit("pear","yellowish")
  val menu=List(Apple,Orange,Pear)
}

第一個(gè)為引用單個(gè)類型,第二個(gè)為按需引用,和 Java 不同的是,是使用“_”代替“*”,第三個(gè)類似于 Java 中的靜態(tài)引用,可以直接使用 Fruits 中定義的對(duì)象。

此外 Scala 中的 import 語(yǔ)句的使用比較靈感,可以用在代碼的任意部分,而不一定需要在文件開(kāi)頭定義。比如下面 import 定義在函數(shù)內(nèi)部:

import bobsdelights.Fruit
def showFruit(fruit:Fruit){
  import fruit._
  println(name+"s are" + color)
}

方法 showFruit 引入 fruit 對(duì)象(非類型)的所有成員,fruit 的類型為 Fruit,因此可以在函數(shù)直接使用 fruit 的成員變量,而無(wú)需使用 fruit 限定符。這個(gè)方法和下面代碼是等價(jià)的:

import bobsdelights.Fruit
def showFruit(fruit:Fruit){
   println(fruit.name+"s are" + fruit.color)
}

和 Java 相比,Scala 的 import 的使用更加靈活:

  • 可以出現(xiàn)在文件中任何地方
  • 可以 import 對(duì)象(singleton 或者普通對(duì)象)和 package 本身
  • 支持對(duì)引入的對(duì)象重命名或者隱藏某些類型

下面的例子直接引入包名稱,而非包中成員,引入包后,可以使用相對(duì)名稱來(lái)指代某個(gè)類型(有些類型文件系統(tǒng)的路徑)

import java.util.regex
class AStarB {
  val pat= regex.Pattern.compile("a*b")
}

import 也可以用來(lái)重命名或者隱藏某些類型,比如:

import Fruits.{Apple,Orange}

僅僅引用 Fruits 中的 Apple 和 Orangle 類型。

下面的例子使用=>重命名類型:

import Fruits.{Apple=>MaIntosh,Orange}

同樣重命名也可以重新定義包名稱,比如:

import java.{sql => S}

將引入的包 java.sql 該名為 java.S 因此可以使用 S.Date 來(lái)代替 sql.Date。

如果需要隱藏某個(gè)類型,可以使用 Type => _ ,將某個(gè)類型改名為_(kāi)就達(dá)到隱藏某個(gè)類型的效果,比如:

import Fruits.{Apple=>_,_}

這個(gè)引用,引入 Fruits 中除 Apple 之外的其它類型。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)