私は非常に些細なことにこだわっていることがわかりました:-]
私は列挙型を持っています:
object Eny extends Enumeration {
type Eny = Value
val FOO, BAR, WOOZLE, DOOZLE = Value
}
コードでは、条件付きでそれを数値に変換する必要があります(変数番号の対応はコンテキストによって異なります)。私は書きます:
val en = BAR
val num = en match {
case FOO => 4
case BAR => 5
case WOOZLE => 6
case DOOZLE => 7
}
そして、これにより、最初のブランチ(この場合は「case 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))
}
}
これがあなたの問題とどのように違うと言えますか?