gpt4 book ai didi

scala - 从嵌套选项中提取值

转载 作者:行者123 更新时间:2023-12-03 03:49:37 25 4
gpt4 key购买 nike

Some(Some(Some(Some(Some(10)))) 中得到 10 的最简洁方法是什么?

无需求助于 Scalaz 等外部库。

最佳答案

import scala.language.higherKinds     

case class Flattener[W[_], WW, T](fn : WW => W[T])

implicit def optionRecFlattenFn[WW, T](
implicit f : Flattener[Option, WW, T] = Flattener((ww: WW) => Option(ww))
) = Flattener((ww : Option[WW]) => ww.flatMap(f.fn))

def optionRecursiveFlatten[WW, T](www : Option[WW])(
implicit f : Flattener[Option, Option[WW], T]
) = f.fn(www)

val nestedOption = Option(Option(Option(Option(10))))
// Some(Some(Some(Some(10))))

val flatOption = optionRecursiveFlatten(nestedOption)
// Some(10)

val evenMoreNestedOption = Option(Option(Option(Option(Option(Option(10))))))
// Some(Some(Some(Some(Some(Some(10))))))

val flatOption2 = optionRecursiveFlatten(evenMoreNestedOption)
// Some(10)

关于scala - 从嵌套选项中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39601083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com