我对下面代码中的第3个println
感到有点困惑,其中输出为None
。根据我的理解:
lookupPlayer(3)
会提供None
<{1}}的子类型Option[Nothing]
上的map
。但None
的{{1}}功能如何运作?请帮我理解一个简单的例子。
map
答案 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函数的定义。如果isEmpty
为Option
,则None
方法返回true,因此None上的地图将始终返回None。
@inline final def map[B](f: A => B): Option[B] =
if (isEmpty) None else Some(f(this.get))