我要調用一個泛型函數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'的開始累加器,則可以省略該類型。 –