我发现自己陷入了一件非常微不足道的事情: - ]
我有一个枚举:
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”)。我做错了什么?
答案 0 :(得分:58)
我怀疑您实际使用的代码不是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
}
答案 1 :(得分:5)
以下代码适用于我:它产生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))
}
}
你能说出这与你的问题有什么不同吗?