Comment utiliser le commutateur/cas (simple pattern matching) dans Scala?

Je me suis trouvé coincé sur un très trivial :-]

J'ai un enum:

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

Dans un code que j'ai pour le convertir en conditionnellement à un certain nombre (varianr-numéro de la correspondance diffère sur 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 "inaccessible" code d'erreur du compilateur pour chaque branche, mais ce qui est le premier ("cas FOO => 4" dans ce cas). Ce que je fais mal?

  • Ma conjecture est que le "en" est "val" et attribuées à la "BARRE". Il ne peut pas être réaffectés plus tard, il est donc égale à la BARRE n'importe où après une telle déclaration.
  • C'est un exemple simplifié, réel programme "fr" est une fonction de l'argument d'entrée. En effet, elle ne peut pas être réaffectés à l'intérieur, mais peuvent varier d'un appel à l'autre.
  • Dans ce cas, peut-être vous pouvez donner moins un exemple simplifié? Comme il se trouve, la réponse est qu'il donne "inaccessible" code d'erreur car il est impossible de code.
  • Je ne peut pas reproduire l'erreur que vous rapport. J'ai pris ton code, inchangé, le mettre à l'intérieur d'un objet et compilé. Avez-vous la soumettre à l'REPL?
  • Fascinante. Après j'ai isolé l'échantillon dans un distinct simple .scala fichier compilé et exécuté, ça marche comme prévu. Mais à l'intérieur de mon programme, il ne le fait pas. Semble que je vais avoir besoin de mon tambourin...
  • J'ai remplacé match avec si-sinon-si. N'a pas l'air joli, mais fonctionne au moins.
  • postez votre code! Vous aurez votre solution assez rapidement, je soupçonne!

InformationsquelleAutor Ivan | 2010-09-03