开发者

How to use switch/case (simple pattern matching) in Scala?

开发者 https://www.devze.com 2023-01-14 15:21 出处:网络
I\'ve found myself stuck on a very trivial thing :-] I\'ve got an enum: object Eny extends Enumeration {

I've found myself stuck on a very trivial thing :-]

I've got an enum:

 object Eny extends Enumeration {
      type Eny = Value
      val FOO, BAR, WOOZLE, DOOZLE = Value
    }

In a code I have to convert it conditionally to a number (varianr-number correspondence differs on context). I write:

val en = BAR
val num = en match {
  case FOO => 4
  case BAR => 5
  case WOOZLE => 6
  case DOOZLE => 7
}

And this gives me an "unreachable code" compile开发者_如何学Cr error for every branch but whatever is the first ("case FOO => 4" in this case). What am I doing wrong?


I suspect the code you are actually using is not FOO, but foo, lowercase, which will cause Scala to just assign the value to foo, instead of comparing the value to it.

In other words:

x match {
  case A => // compare x to A, because of the uppercase
  case b => // assign x to b
  case `b` => // compare x to b, because of the backtick
}


The following code works fine for me: it produces 6

object Eny extends Enumeration {
  type Eny = Value
  val FOO, BAR, WOOZLE, DOOZLE = Value
}

import Eny._

class EnumTest {
    def doit(en: Eny) = {
        val num = en match {
          case FOO => 4
          case BAR => 5
          case WOOZLE => 6
          case DOOZLE => 7
        }       

        num
    }
}

object EnumTest {
    def main(args: Array[String]) = {
        println("" + new EnumTest().doit(WOOZLE))
    }
}

Could you say how this differs from your problem please?

0

精彩评论

暂无评论...
验证码 换一张
取 消