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" compiler error for every branch but whatever is the first ("case FOO => 4" in this case). What am I doing wrong?
A pattern match includes a sequence of alternatives, each starting with the keyword case. Each alternative includes a pattern and one or more expressions, which will be evaluated if the pattern matches. An arrow symbol => separates the pattern from the expressions.
Notes. Scala's pattern matching statement is most useful for matching on algebraic types expressed via case classes. Scala also allows the definition of patterns independently of case classes, using unapply methods in extractor objects.
Case classes help us use the power of inheritance to perform pattern matching. The case classes extend a common abstract class. The match expression then evaluates a reference of the abstract class against each pattern expressed by each case class.
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?
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 }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With