如何在Scala中使用开关/shell(简单模式匹配)?

我发现自己陷在了一件很平凡的事情上: – ]

我有一个枚举:

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

在代码中,我必须有条件地将其转换为数字(varianr-number的对应关系不同)。 我写:

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

这给了我一个“无法访问的代码”编译器错误的每个分支,但无论是第一个(“案例FOO => 4在这种情况下)。 我究竟做错了什么?

我怀疑你实际使用的代码不是FOO ,而是foo ,小写,这将导致Scala只将值赋给foo ,而不是将值与它进行比较。

换一种说法:

 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 } 

下面的代码适合我:它生​​成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)) } } 

你能说这和你的问题有什么不同吗?