此代码将函数应用于Ints列表,并将值4中的每个值设置为选项列表:
val l = List(1,2,3,4,5) //> l : List[Int] =
val v = 4 //> v : Int = 4
def g(v:Int) = List(v-1, v, v+1) //> g: (v: Int)List[Int]
l map (x => {f(x);}) //> res0: List[Option[Int]] = List(Some(4), Some(4), Some(4), Some(4), Some(4))
Run Code Online (Sandbox Code Playgroud)
地图签名:
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {
Run Code Online (Sandbox Code Playgroud)
由于B是第一个类型参数(在map [B,That]中)这是否意味着它键入前缀操作数'l'(List)?
怎么打'A'?scala编译器是否以某种方式检查List'l'中的类型并推断其类型为Int?
怎么打'那个'?
对于简单签名map的List[A]是
def map[B](f: (A) ? B): List[B]
Run Code Online (Sandbox Code Playgroud)
意思就是
A 由实际列表的类型参数决定
Int 对于示例列表 lB由f作为参数传递
的函数的目标类型确定Option[Int] 用于示例功能 f: Int -> Option[Int]扩展的签名是
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That
Run Code Online (Sandbox Code Playgroud)
它存在,以便您可以在可以以某种方式遍历的容器之间进行一般映射,即使目标遍历具有与原始不同的形式.
一个具体的例子是遍历a
Map作为容器Pairs,具有产生单个值的映射函数.生成的遍历Map不再是,因此CanBuildFrom隐式参数用于查找结果对象的"可用表示".
在这个签名中我们有
Repr 作为原始遍历容器的类型B 作为包含值的目标类型,如简化签名中所示That作为目标容器的类型,由CanBuildFrom在调用站点处具有正确类型的隐式存在确定| 归档时间: |
|
| 查看次数: |
3284 次 |
| 最近记录: |