gpt4 book ai didi

scala - 有状态的函数管道

转载 作者:行者123 更新时间:2023-12-04 22:43:36 24 4
gpt4 key购买 nike

代码解释了自己。

val s = Seq(1,1,1)
val res: Seq[Int] = s.map(...)
.check(count how many 1s, if > 2 throw Exception)
.map(...)

我正在寻找此问题的简单解决方案 check功能 。
  • 我可以用 mapclosure计数和抛出,但我想要纯函数。
  • 我可以用 filtersizereduce ,但它返回一个值,并且不能通过以下映射恢复。

  • 我如何制作 有状态 检查管道到管道 ?

    最佳答案

    抛出异常可以说是不纯粹的。如果您改为使用一元形式的错误处理,您将执行以下操作:

    Option(s.map(foo)).
    filter(m => m.count(_ == 1) < 2).
    map{ s =>
    s.map(bar)
    .filter(baz)
    ...
    }

    事实上,如果你想在管道中组合它,并且你不想添加额外的括号,这是必要的 match ,可以使用常用的 tap方法:
    implicit class TapAnything[A](private val a: A) extends AnyVal {
    def tap[U](f: A => U): A = { f(a); a }
    }

    现在你可以
    s.map(...)
    .tap(self => if (self.count(_ == 1) > 1) throw new Exception)
    .map(...)
    ...

    (注意: private val + extends AnyVal 只是为了向编译器表明它应该尽量避免创建额外的对象来进行调用)。

    关于scala - 有状态的函数管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494602/

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