scala中Option中的map函数

Pri*_*ain 1 functional-programming scala

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

  1. lookupPlayer(3)将给出None哪个是子类型Option[Nothing]
  2. 然后,mapNone将被调用.但是工作的map功能如何None

请帮我理解一个简单的例子.

case class Player(name: String)

def lookupPlayer(id: Int): Option[Player] = {
  if (id == 1) Some(new Player("Sean"))
  else if(id == 2) Some(new Player("Greg"))
  else None
}

def lookupScore(player: Player): Option[Int] = {
  if (player.name == "Sean") Some(1000000) else None
}

println(lookupPlayer(1).map(lookupScore))  // Some(Some(1000000))
println(lookupPlayer(2).map(lookupScore))  // Some(None)
println(lookupPlayer(3).map(lookupScore))  // None
Run Code Online (Sandbox Code Playgroud)

Tza*_*har 5

来自文档:

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

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

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