gpt4 book ai didi

design-patterns - Scala 中针对经常遇到的问题建立了哪些常见模式/解决方案

转载 作者:行者123 更新时间:2023-12-04 10:05:49 24 4
gpt4 key购买 nike

我要开始滚球了。

给定一系列元素,其中一些元素可以多次包含,一个典型的要求是对它们进行计数 - 以计数或直方图的形式。

经常引用的解决方案是:

ss.groupBy(identity).mapValues(_.size)

那么对于 Scala 中常见的类似问题还有哪些其他解决方案呢?

最佳答案

并不是说我再次敲击同一个鼓,而是...

我们有许多进程可能会产生成功的输出或失败并显示一些错误消息的问题的解决方案。目标是聚合成功的结果,如果所有过程都产生成功,如果一个或多个失败,聚合所有错误消息。

这可以通过 解决斯卡拉兹 验证:首先,设置一些导入

scala>  import scalaz._; import Scalaz._
import scalaz._
import Scalaz._

现在让我们定义我们的“流程”
scala> def fooI(s : String) : ValidationNEL[Exception, Int] = s.parseInt.liftFailNel
fooI: (s: String)scalaz.Scalaz.ValidationNEL[Exception,Int]

scala> def fooF(s : String) : ValidationNEL[Exception, Float] = s.parseFloat.liftFailNel
fooF: (s: String)scalaz.Scalaz.ValidationNEL[Exception,Float]

scala> def fooB(s : String) : ValidationNEL[Exception, Boolean] = s.parseBoolean.liftFailNel
fooB: (s: String)scalaz.Scalaz.ValidationNEL[Exception,Boolean]

现在使用 Applicative汇总失败/成功:
scala> def attempt(ss : String*) = (fooI(ss(0)) <|**|> (fooF(ss(1)), fooB(ss(2)))) match {
| case Success((i, f, b)) => println("Found " + i + " " + f + " " + b)
| case Failure(es) => es foreach println
| }
attempt: (ss: String*)Unit

现在让我们尝试一些失败:
scala> attempt("a", "b", "true")
java.lang.NumberFormatException: For input string: "a"
java.lang.NumberFormatException: For input string: "b"

现在让我们为成功而努力:
scala> attempt("1", "2.3", "false")
Found 1 2.3 false

关于design-patterns - Scala 中针对经常遇到的问题建立了哪些常见模式/解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277008/

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