gpt4 book ai didi

scala - scala : better approach? 中嵌套 "if"/"match"语句

转载 作者:行者123 更新时间:2023-12-01 23:28:01 25 4
gpt4 key购买 nike

我有一系列验证函数,它们返回 Option[Problem](如果有),或者如果没有发现验证问题则返回 None。我想编写一个简单的函数来调用每个验证函数,停止并返回第一个非 None 结果。

当然,我可以用“java风格”编写这个方法,但我想知道是否存在更好的方法。

编辑

这是最初的 Java 解决方案:

validate01(arg);
validate02(arg);
validate03(arg);
...

每个方法在出现问题时都会引发异常。当我编写 Scala 时,我会远离异常。

最佳答案

举个例子,假设我们要验证一个字符串。我们的验证函数采用一个 String 和一个验证器列表,这些验证器是从 StringOption[Problem] 的函数。我们可以用这样的函数方式实现它:

def firstProblem(validators: List[String => Option[Problem]], s:String) =
validators.view.flatMap(_(s)).headOption

这会通过将每个验证函数应用于字符串并仅在结果是 Some 时保留结果来创建一个新列表。然后我们获取该列表的第一个元素。由于调用了 view,因此只会根据需要计算列表。因此,一旦发现第一个问题,就不会调用更多验证器。

关于scala - scala : better approach? 中嵌套 "if"/"match"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14046697/

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