码迷,mamicode.com
首页 > 其他好文 > 详细

Scala非值类型详解

时间:2015-04-09 12:19:24      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

以下类型并不表示值的集合,也并不显式地出现在程序中。它们只以已定义标识符的内部类型而引入。

方法类型

方法类型在内部表示为(Ts)U(Ts)是一个类型序列(T1,...,Tn) n>=0U是一个(值或者方法)类型。这个类型表示一个命名的方法,其参数的类型是T1,...,Tn,返回结果的类型是U

方法类型是右结合的,(Ts1)(Ts2)U被处理的方式是(Ts1)((Ts2)U)

一个特例是没有参数的方法类型。可以写为=>T的形式。无参数方法名称表达式将会在每次名称被引用时求值。

方法类型并不以值的类型的形式存在。如果方法名以值的方式被引用,其类型将会被自动转换为对应的函数类型(§6.25)

示例3.3.1 以下声明:

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类型构造器参数。

Scala非值类型详解

标签:

原文地址:http://my.oschina.net/crxy/blog/397761

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!