Je travaille actuellement sur un projet dans Scala et j'ai rencontré un petit problème.Objets de cas de requête de correspondance dans Scala
J'utilise actuellement une instruction de correspondance pour déterminer le type d'un objet de cas. Je vais à travers cela en disant:
abstract class Symbol
case object program extends Symbol
case object stmt_list extends Symbol
case object stmt extends Symbol
case object expr extends Symbol
case object term_tail extends Symbol
case object term extends Symbol
case object factor_tail extends Symbol
case object factor extends Symbol
case object add_op extends Symbol
case object mult_op extends Symbol
def expected_symToIndex(expected_sym: Symbol): Int = expected_sym match {
case program => 0
case stmt_list => 1
case stmt => 2
case expr => 3
case term_tail => 4
case term => 5
case factor_tail => 6
case factor => 7
case add_op => 8
case mult_op => 9
}
Dans Eclipse, cela me donne un avertissement disant que
« motifs après un motif variable ne peut égaler (SLS 8.1.1) Si vous destiné à faire correspondre le programme d'objet dans le paquet, vous devez utiliser des accents graves, comme: programme ⇒ cas »
sur la première ligne. Tout le reste est un code inaccessible.
Après avoir testé mon programme, cette méthode renvoie toujours 0 (car elle s'exécute toujours sur la première ligne d'objet de la méthode). J'ai cherché des méthodes de correspondance d'objets, mais je n'ai pas trouvé beaucoup de matériel similaire à ce qui se passe ici. Je suis confus parce que ces symboles ne sont pas des variables en eux-mêmes; Ce sont des types que je vérifie à l'intérieur de la déclaration de match. En outre, le "programme" environnant et d'autres valeurs testées avec des retours ne fonctionnent pas. Lorsque je tente quelque chose comme ceci pour tester le type:
case a: program => 0
Le compilateur me dit que ne peut pas être trouvé le type « programme ».
Merci!
Y a-t-il une raison pour laquelle vous utilisez une classe abstraite au lieu d'un trait scellé? – fuzzycuffs
Une raison pour laquelle tous vos objets sont en minuscules? Quand j'ai fait tous ces cas en majuscules, le code compilé est très bien. – Tanjin