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!
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que le code que vous utilisez réellement n'est pas
FOO
, maisfoo
, minuscules, qui sera la cause de la Scala à seulement affecter la valeur defoo
, au lieu de comparer la valeur.En d'autres termes:
Le code suivant fonctionne très bien pour moi: il produit 6
Pourrait vous dire combien il diffère en cela votre problème, s'il vous plaît?