Scala非值類型詳解

如下類型並不表示值的集合,也並不顯式地出如今程序中。它們只以已定義標識符的內部類型而引入。 函數

方法類型 spa

方法類型在內部表示爲(Ts)U(Ts)是一個類型序列(T1,...,Tn) n>=0U是一個(值或者方法)類型。這個類型表示一個命名的方法,其參數的類型是T1,...,Tn,返回結果的類型是Uit

方法類型是右結合的,(Ts1)(Ts2)U被處理的方式是(Ts1)((Ts2)U)io

一個特例是沒有參數的方法類型。能夠寫爲=>T的形式。無參數方法名稱表達式將會在每次名稱被引用時求值。 List

方法類型並不以值的類型的形式存在。若是方法名以值的方式被引用,其類型將會被自動轉換爲對應的函數類型(§6.25)引用

示例3.3.1 如下聲明: nio

def a: Int 程序

def b (x: Int): Boolean 方法

def c (x: Int)(y: String, z: String): String 命名

產生如下類型:

a: => Int

b: (Int) Boolean

c: (Int)(String, String) String

多態方法類型

多態方法類型在內部表示爲[tps]T[tps]是類型參數部分[a1 >: L1 <: U1,...,an >: Ln <: Un]n>=0T是一個(值或方法)類型。該類型表示一個以S1,...,Sn爲類型參量併產生類型爲T的結果的命名方法,參數類型S1,...,Sn與下界L1,...,Ln和上界U1,...,Un一致(§3.2.4)

示例3.3.2 如下聲明:

def empty[A]: List[A]

def union[A <: Comparable[A]] (x: Set[A], xs: Set[A]): Set[A]

產生以下類型:

empty: [A >: Nothing <: Any] List[A]

union: [A >: Nothing <: Comparable[A]] (x: Set[A], xs: Set[A]) Set[A]

類型構造器

類型構造器在內部的表示方法相似於多態方法類型。[+/- a1 >: L1 <: U1,...,+/-an >: Ln <: Un] T表示一個指望是類型構造器參數(§4.4)或有對應類型參數子句的抽象類型構造器綁定(§4.3)的類型。

示例3.3.3 如下是類Iterable[+X]的片斷:

trait Iterable[+X] {

def flatMap[newType[+X]<:Iterabe[X], S](f: X => newType[S]): newType[S]

}

從概念上來說,類型構造器Iterable是匿名類型[+X] Iterable[X]的名稱,在


flatMap中傳遞給newType類型構造器參數。

相關文章
相關標籤/搜索