gpt4 book ai didi

scala - Scala 中同一个 protected case 语句中的多个条件?

转载 作者:行者123 更新时间:2023-12-01 08:27:49 27 4
gpt4 key购买 nike

我有几个条件要堆叠在 scala 匹配语句中。在另一种语言中,我可以省略 switch 语句之间的“中断”。

我知道我可以组合由管道字符分隔的原始替代方案,但似乎无法找到如何组合 protected 情况,例如:

val isAdmin = true
myval match {
case 1 if isAdmin => ...
case 2 if isAdmin => ...
case 1 | 2 => // this is fine but doesn't apply the guard, so no use
case 1 | 2 if isAdmin => // doesn't apply the guard to '1'
case 1 if isAdmin | 2 if isAdmin => // invalid syntax
}

是否有可能以某种方式结合前两种情况?

最佳答案

守卫声明适用于一切事物,无论是好是坏。这意味着你的例子

  case 1 | 2 if isAdmin => ...

实际上做你想做的,你说的却没有,但这也意味着
Option("Hi") match {
case Some(x) | None if x == "Hi" => 1
case _ => 0
}

不起作用。 (事实上​​,它甚至无法编译。)

幸运的是,Scala 允许您在几乎任何地方放置 def。
def caseNice = 1
Option("Hi") match {
case Some(x) if x.length < 3 => caseNice
case None => caseNice
case _ => 0
}

这就是您应该如何处理难以从单个 case 调用的常见功能。陈述。

关于scala - Scala 中同一个 protected case 语句中的多个条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571206/

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