Scala type d'énumération échouer dans match/cas
Valeurs énumérées semblent échouer dans le match de cas, les expressions. C'est ce qui se passe dans une feuille de calcul.
object EnumType extends Enumeration {
type EnumType = Value
val a, b = Value
}
import EnumType._
val x: EnumType = b //> x : ... .EnumType.EnumType = b
x match {
case a => "a"
case b => "b"
} //> res0: String = a
if (x == a) "a" else "b" //> res1: String = b
Ce qu'il se passe? Merci.
Vous devriez avoir reçu un avertissement que la 2ème
Ce même code dans un .scala fichier produit un avertissement, mais pas dans une feuille de calcul.
case
ne peut jamais correspondre à, droite?Ce même code dans un .scala fichier produit un avertissement, mais pas dans une feuille de calcul.
OriginalL'auteur RussAbbott | 2014-01-28
Vous devez vous connecter pour publier un commentaire.
Comme @Kevin Wright et @Lee vient d'être dit,
a
etb
travail comme variable de modèles, non pas commeEnumType
valeurs.Une autre option pour corriger votre code, il est explicite que vous faites référence à des valeurs de la
EnumType
singleton:OriginalL'auteur
La
a
etb
dans votrematch
bloc ne sont pas les mêmes que les valeurs énuméréesa
etb
, le modèle de matcher simplement correspondrex
dans le premier cas, et de la lier à une nouvelle valeura
(le deuxième cas sera ignoré)Pour éviter cela, vous avez deux choix:
1) envelopper les valeurs dans les backticks:
2) les valeurs énumérées en majuscules:
Etant donné que ces valeurs sont (à tous égards, un des objectifs), les constantes, en utilisant des majuscules est le plus commun/idiomatiques solution.
Noter que seule la première lettre doit être en majuscule, pas le nom de l'ensemble du littéral.
N'hésitez pas à accepter ce que les rochers votre bateau le plus 🙂 d'ailleurs, vous pouvez toujours changer accepté de répondre si quelque chose d'autre vient le long de ce que vous pensez est un meilleur ajustement pour la question.
J'irais aussi avec les rendant majuscules de toute façon, en respectant la convention de nommage et aussi de ne pas être traité comme un modèle de valeurs dans la correspondance de motif
OriginalL'auteur
a
dans votre cas, une instruction est une unbound variable qui correspond à quoi que ce soit. Vous devez explicitement vérifier la valeur est égale àa
:Voir les deux autres réponses qui sont réellement expliquer pourquoi il arrive
OriginalL'auteur