Pattern Match “return” value

后端 未结 2 1503
孤街浪徒
孤街浪徒 2021-01-18 00:58

Why is it not possible to chain pattern matching constructs? For instance, the following is legal, if nonsensical,

val a = ADT(5)

val b = a match {
  case          


        
2条回答
  •  [愿得一人]
    2021-01-18 01:15

    Yes it should work, because (almost) everything in Scala is an expression and every expression can be used as a pattern match.

    In this case the pattern match is an expression, so it can be used by another "chained" pattern match. But the compiler doesn't like it.

    Giving the compiler a little hint with parentheses helps:

    case class ADT(value: Int)
    
    val a = ADT(5)
    
    (a match {
      case ADT(a) if a > 4 => ADT(a * 3)
      case ADT(a) => ADT(a + 1)
    }) match {
      case ADT(a) if a > 13 => println(a)
      case _ => {}
    }
    

提交回复
热议问题