对于以下map
签名,我是否正确阅读?
object OptionImpl extends Option {
def map[B](f: A => B): Option[B]
}
源代码 - Scala 中的 FP
[B]
意味着只有类型的对象B
可以调用这个函数
f: A => B
意味着它接受 1 个参数,一个返回相同类型的函数B
我对这个函数的一个具体例子很模糊。
对于以下map
签名,我是否正确阅读?
object OptionImpl extends Option {
def map[B](f: A => B): Option[B]
}
源代码 - Scala 中的 FP
[B]
意味着只有类型的对象B
可以调用这个函数
f: A => B
意味着它接受 1 个参数,一个返回相同类型的函数B
我对这个函数的一个具体例子很模糊。
B
只是一个通配符(即通用)。它只是说这两种类型是相同的:
def map[B](f: A => B): Option[B]
^ ^
也就是说,它说:如果你给我一个将A
s 转换为B
s 的函数,我会给你一个Option
可能包含 a的函数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 返回一个选项。