次のmap
署名について、正しく読んでいますか?
object OptionImpl extends Option {
def map[B](f: A => B): Option[B]
}
source - Scala の FP
[B]
タイプのオブジェクトのみB
がこの関数を呼び出すことができることを意味します
f: A => B
同じ型を返す1つの引数、関数を受け入れることを意味しますB
この関数の具体的な例については、あいまいです。
次のmap
署名について、正しく読んでいますか?
object OptionImpl extends Option {
def map[B](f: A => B): Option[B]
}
source - Scala の FP
[B]
タイプのオブジェクトのみB
がこの関数を呼び出すことができることを意味します
f: A => B
同じ型を返す1つの引数、関数を受け入れることを意味しますB
この関数の具体的な例については、あいまいです。
B
単なるワイルドカード (つまりジェネリック) です。これら2つのタイプが同じであると言っているだけです:
def map[B](f: A => B): Option[B]
^ ^
つまり、A
s をs に変換する関数を渡すと、aを含む可能性B
のある an が返されます(任意の型である可能性があります)。Option
B
B
これは、オプションの使用に関する非常に便利なリンクhttp://blog.tmorris.net/posts/scalaoption-cheat-sheet/です。
こんなシチュエーションなら
option match {
case None => None
case Some(x) => Some(foo(x))
}
使用する
option.map(foo(_))
もう一つの例
def processBody(contentType: String): String = {
.....
}
val body: Option[String] =
headers.get("Content-Type").map(processBody(_))
ここでは、headers.get が Option を返すと仮定しました。