Je me suis retrouvé coincé sur une chose très banale: -]
J'ai une énumération:
object Eny extends Enumeration {
type Eny = Value
val FOO, BAR, WOOZLE, DOOZLE = Value
}
Dans un code, je dois le convertir conditionnellement en un nombre (la correspondance des nombres variés varie selon le contexte). J'écris:
val en = BAR
val num = en match {
case FOO => 4
case BAR => 5
case WOOZLE => 6
case DOOZLE => 7
}
Et cela me donne une erreur de compilation "code inaccessible" pour chaque branche mais quelle que soit la première ("case FOO => 4" dans ce cas). Qu'est-ce que je fais mal?
Je soupçonne que le code que vous utilisez n'est pas FOO
, mais foo
, en minuscules, ce qui entraînera Scala pour simplement affecter la valeur à foo
, au lieu de lui comparer la valeur.
En d'autres termes:
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
}
Le code suivant fonctionne bien pour moi: il produit 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))
}
}
Pourriez-vous dire en quoi cela diffère de votre problème s'il vous plaît?