我要调用一个泛型函数f[X](...)
,并在我的情况X
恰好是Option[Y]
。我试图通过这两个Some[...]
和None
当函数需要X
,但斯卡拉坚持X
是Some[Y]
型。我可以让Scala在此推断Option类型吗?
def flattenOptionMap[A, B](input : Map[A, Option[B]]) : Option[Map[A, B]] = {
input.foldLeft[Option[Map[A,B]]] (Some(Map.empty)) {
case (_, (_, None)) => None
case (None, (_, _)) => None
case (Some(acc), (key, Some(value))) => Some(acc + (key -> value))
}
}
在这个例子中,我必须明确指定Option[Map[A,B]]
应作为一般类型foldLeft
。所有必要的类型信息已经包含在上下文中,并且在我看来,输入繁琐的类型(比如Option[Map[A,B]]
)往往会大大降低我的代码的可读性。
有没有办法让斯卡拉毕竟推断类型,否则将避免复制粘贴整个类型?
如果您使用'Option(Map.empty [A,B])'作为'foldLeft'的开始累加器,则可以省略该类型。 –