次のコードで第3のprintln
と混乱します。出力はNone
です。私の理解によると:スカラのオプションのマップ機能
lookupPlayer(3)
が続いNone
上map
が呼び出されますOption[Nothing]
のサブタイプがあるNone
を与えるだろう。しかしNone
のmap
の機能はどのように機能しますか?
私は簡単な例で理解してください。 docsから
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
2つ目の点として、NoneのマップはNoneを生成します:Optionのソースコードを見ることができます。 – bhericher