gpt4 book ai didi

scala - 将模式匹配混合到一系列映射和过滤器中

转载 作者:行者123 更新时间:2023-12-04 17:55:16 24 4
gpt4 key购买 nike

假设我想做类似下面的事情,我在其中操作一个 Scala 列表,然后执行匹配以转换为一个选项。有没有一种方法可以在不添加括号的情况下继续链(对于更复杂的示例,嵌套括号可能看起来很困惑)?

  def foo: Option[Int] = {
MyUtils.myListOfFoo
.flatMap(_.barList)
.filter(_.isGood)
.toList match {
case List(bar) => Some(addr)
case _ => None
}
.map(_.getBaz) // would like to do something like this w/o adding parens
.map(_.numBlah)
}

最佳答案

你可以用 pimp my library 模式模拟它:

  object MyUtils {

implicit class ListOpts[A](val l: List[A]) extends AnyVal {
def myMatch[B](pf: PartialFunction[List[A], Option[B]]): Option[B] =
pf.applyOrElse(l, (_: List[A]) => None)
}

...
}

然后在范围内导入它

  import MyUtils._

最后,您的无括号管道是

  def foo: Option[Int] = {
myListOfFoo // imported
.flatMap(_.barList)
.filter(_.isGood)
.toList // Not needed as filter already returns a List
.myMatch { // resolved implicitly
case List(bar) => Some(addr)
case _ => None // Not needed as it's handled by myMatch
}
.map(_.getBaz) // would like to do something like this w/o adding parens. Now you can :-)
.map(_.numBlah)
}

关于scala - 将模式匹配混合到一系列映射和过滤器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24130640/

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