如下類型並不表示值的集合,也並不顯式地出如今程序中。它們只以已定義標識符的內部類型而引入。 函數
方法類型 spa
方法類型在內部表示爲(Ts)U,(Ts)是一個類型序列(T1,...,Tn) n>=0,U是一個(值或者方法)類型。這個類型表示一個命名的方法,其參數的類型是T1,...,Tn,返回結果的類型是U。 it
方法類型是右結合的,(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>=0,T是一個(值或方法)類型。該類型表示一個以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類型構造器參數。