Scala中的模式匹配传递

Scala中的模式匹配传递,scala,Scala,我想这样做: val a = v match { case 1 => 1 case 2 if (condition) => logging case 2 if (other conditions) => 3 case 2 if (more conditions) => 4 case _ => 5 } 我希望它只返回第一个案例2的日志,但通过其他方式查看返回的内容 编辑:更新了类似这样的内容 如果v==2,将为a赋值,否则将为a赋值v

我想这样做:

val a = v match {
   case 1 => 1
   case 2 if (condition) => logging
   case 2 if (other conditions) => 3
   case 2 if (more conditions) => 4
   case _ => 5
}
我希望它只返回第一个案例2的日志,但通过其他方式查看返回的内容

编辑:更新了类似这样的内容

如果v==2,将为a赋值,否则将为a赋值v

像这样的

如果v==2,将为a赋值,否则将为a赋值v


Scala的案例匹配没有失败,但如果我理解正确,这将满足您的需求

val a = v match {
  case 1 => 1
  case 2 => {
    logging // I'm assuming `logging` is some Unit
    if(some condition) 3
    else if(some other condition) 4
    else 5
  }
  case _ => 5
}

Scala的案例匹配没有失败,但如果我理解正确,这将满足您的需求

val a = v match {
  case 1 => 1
  case 2 => {
    logging // I'm assuming `logging` is some Unit
    if(some condition) 3
    else if(some other condition) 4
    else 5
  }
  case _ => 5
}

我的逻辑更像是如果v=2,log,然后fall-through,所以在本例中,它将转到默认情况并返回4。我的逻辑更像是如果v=2,log,然后fall-through,所以在本例中,它将转到默认情况并返回4。为什么不编写真正的代码来运行并执行您想要的操作呢,使用if语句和返回以及您需要的任何内容,然后询问如何改进它?我不确定你到底想要什么。这还不是真正的代码,它可以运行并实现你想要的。你仍然在想象match语句的工作方式与它们实际的工作方式不同,然后希望我们能猜出你在想什么。它们所请求的与F中的OR'd匹配模式类似,在F中,多个模式可以导致同一个案例的输出。你为什么不编写真正的代码来运行并实现你想要的结果呢,使用if语句和返回以及您需要的任何内容,然后询问如何改进它?我不确定你到底想要什么。这还不是真正的代码,它可以运行并实现你想要的。你仍然在想象match语句的工作方式与它们实际的工作方式不同,然后希望我们能猜出你在想象什么。它们所要求的与F中的OR'd匹配模式类似,在F中,多个模式可以导致同一个案例的输出。