鍍金池/ 教程/ Scala/ 使用 import
包對象
Ordered Trait
組合和繼承–定義 final 成員
基本數(shù)據(jù)類型
Match 表達式
類和對象 (三)
操作基本數(shù)據(jù)類型
for 表達式
組合和繼承–重載成員函數(shù)和方法
類和對象 (二)
組合和繼承–定義 factory 對象
組合和繼承–多態(tài)和動態(tài)綁定
Trait 的基本概念
if 表達式
組合和繼承–抽象類
函數(shù)–函數(shù)字面量的一些簡化寫法
while 循環(huán)
組合和繼承–使用組合還是繼承?
訪問控制修飾符
Trait 示例–Rectangular 對象
組合和繼承–定義參數(shù)化成員變量
組合和繼承–定義無參數(shù)方法
類和對象 (一)
函數(shù)–閉包
函數(shù)–類成員函數(shù)
Scala 基本數(shù)據(jù)類型的實現(xiàn)方法
try 表達式處理異常
選擇瘦接口還是胖接口設計?
組合和繼承–小結(jié)
創(chuàng)建新的控制結(jié)構(gòu)
使用 import
為訪問控制修飾符添加作用域
Scala 的類層次關系
類和對象 (五)
傳名參數(shù)
柯里化函數(shù)
函數(shù)–頭等公民
組合和組合和繼承–定義 heighten 和 widen 函數(shù)
使用 Package–將代碼放入包中
隱含的 import
所有類的公共子類–底層類型
進一步 Scala
函數(shù)–局部函數(shù)
引用包中的代碼
組合和繼承–使用 override 修飾符
組合和繼承–實現(xiàn)類 Element 的 above,beside 和 toString()方法
類和對象 (四)
函數(shù)–尾遞歸
沒有“break”和“continue”的日子
組合和繼承–調(diào)用基類構(gòu)造函數(shù)
減低代碼重復
函數(shù)–函數(shù)–可變參數(shù),命名參數(shù),缺省參數(shù)
起步 Scala
組合和繼承–擴展類
函數(shù)–部分應用的函數(shù)
開始神奇的 Scala編程之旅
組合和繼承–概述
Trait 用來實現(xiàn)可疊加的修改操作

使用 import

和 Java 一樣,Scala 也是通過 import 語句引用其它包中定義的類型,類型引入后,可以使用短名稱來引用該類型而無需使用全路徑。要注意的 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)
}

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

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

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

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

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

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

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

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

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

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

import Fruits.{Apple,Orange}

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

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

import Fruits.{Apple=>MaIntosh,Orange}

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

import java.{sql => S}

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

如果需要隱藏某個類型,可以使用 Type => _ ,將某個類型改名為_就達到隱藏某個類型的效果,比如:

import Fruits.{Apple=>_,_}

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