scala中Option中的map函数

时间:2017-01-09 09:32:12

标签: scala functional-programming

我对下面代码中的第3个println感到有点困惑,其中输出为None。根据我的理解:

  1. lookupPlayer(3)会提供None <{1}}的子类型
  2. 然后将调用Option[Nothing]上的map。但None的{​​{1}}功能如何运作?
  3. 请帮我理解一个简单的例子。

    map

2 个答案:

答案 0 :(得分:5)

来自docs

  

最终def map [B](f:(A)⇒B):选项[B]

     

返回一个scala.Some,其中包含如果此scala.Option为非空,则将f应用于此scala.Option的值的结果。否则返回无。

所以 - 简单地说,None.map(<any function>)会返回None

答案 1 :(得分:0)

放入简单术语的地图操作意味着将某些事物从x1转换为x2。这里x1和x1可以与

类型相同
scala> Some(1).map(x => x * 2)
res10: Option[Int] = Some(2)

或者它可以是不同类型的

scala> Some(1).map(x => x.toString)
res11: Option[String] = Some(1)

但是当没有任何东西可以转换map操作的输出时什么都没有。因此,无功能上的map功能将始终返回None。

scala> None.map((x: Int) => 0)
res1: Option[Int] = None

这是Option类中map函数的定义。如果isEmptyOption,则None方法返回true,因此None上的地图将始终返回None。

  @inline final def map[B](f: A => B): Option[B] =
    if (isEmpty) None else Some(f(this.get))