J'ai une structure de données à trois niveaux (indentation et ruptures de ligne pour la lisibilité): accéder aux données les plus profondes (scores) nécessite beaucoup de dactylographie: p> < Pré> xxx pré> existe une manière moins verbeuse pour modifier la valeur des scores? p> Je suis un nouveau-shelbie Scala, de sorte que toutes les autres observations du code ci-dessus sont également les bienvenues. < / p> p>
4 Réponses :
Vous n'avez pas à utiliser "Appliquer", faites-le normalement avec "()"
m("normal")("home")("scores") = 1
Cela fonctionne dans cet exemple, mais ne fonctionnera pas si m ("normal") ("home") n'a pas déjà été défini.
Vous pouvez écrire comme p> 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. P> p>
L'ajout d'une fonction d'assistance locale est toujours un bon moyen de réduire la duplication de code: [Modifier le code rendu plus serré] p> p> P>
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!
moins verbose: 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)
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