9
votes

Comment accéder et mettre à jour une valeur dans une carte mutable de la carte des cartes

J'ai une structure de données à trois niveaux (indentation et ruptures de ligne pour la lisibilité): xxx

accéder aux données les plus profondes (scores) nécessite beaucoup de dactylographie: < Pré> xxx

existe une manière moins verbeuse pour modifier la valeur des scores?

Je suis un nouveau-shelbie Scala, de sorte que toutes les autres observations du code ci-dessus sont également les bienvenues. < / p>


0 commentaires

4 Réponses :


21
votes

Vous n'avez pas à utiliser "Appliquer", faites-le normalement avec "()"

m("normal")("home")("scores") = 1


1 commentaires

Cela fonctionne dans cet exemple, mais ne fonctionnera pas si m ("normal") ("home") n'a pas déjà été défini.



10
votes

Vous pouvez écrire xxx

comme xxx

Cependant, je ne suis pas sûr que si une telle structure est une bonne idée. Peut-être devriez-vous envisager d'encapsuler cette fonctionnalité dans une classe spécialisée.


0 commentaires

3
votes

L'ajout d'une fonction d'assistance locale est toujours un bon moyen de réduire la duplication de code: xxx

[Modifier le code rendu plus serré]


1 commentaires

Astucieux ! (J'espère juste pas trop intelligent :) m'a pris quelques lectures avant de réaliser ce qui se passe ici. Grande réponse, merci!



3
votes

moins verbose: xxx pré>

Cela tire parti du fait que les deux appliquer code> et update code> ont des sucres syntaxiques pour eux comme on le voit ci-dessus . Plus court: P>

// On REPL, put both these definitions inside an object instead
// of entering them on different lines
def scores = m("normal")("home")("scores")
def scores_=(n: Int) = m("normal")("home")("scores") = n

assert(scores === 0)

val s1 = scores + 1
scores = s1

assert(scores === 1)

val s2 = scores + 2
scores = s2

// Just so you see these updates are being made to the map:
assert(m("normal")("home")("scores") === 3)


1 commentaires

C'est aussi une réponse très utile - merci! Je souhaite que beaucoup de upvotes vous aussi. Getter / Setter expliquée pour les débutants: DustinMartin.net/2009/ 10 / getters-et-Setters-in-scala