2015-11-01 2 views
4

Commencé à jouer le week-end avec Kotlin et essayer d'obtenir des cartes fonctionnant avec les opérateurs. D'une certaine manière, Kotlin me dit que je le confonds avec ambiguïté.Kotlin Carte utilisant les opérateurs

Code est ici qui fonctionne (syntaxiquement pas comme je le souhaite):

var columns = sortedMapOf("a" to 1, "b" to 2) 
columns.plusAssign("c" to 3) 

Et voici le code qui ne fonctionne tout simplement pas compilé (mais syntaxiquement plus proche de ce que je veux)

var cs = sortedMapOf(1 to "a", 2 to "b") 
cs += Pair(3, "c") 

Quel opérateur de raccourcis magie/casting me manque?

Merci d'avance.

+0

Je comprends la question, mais je voudrais juste le résoudre avec 'columns.put (" c ", 3);' –

+0

JB, d'accord - il y a 100 façons de le faire fonctionner (fonctionnellement). Le fait est que Kotlin supporte l'opérateur + = et qu'il devrait fonctionner, et je veux l'utiliser comme il lit mathématiquement je veux que mon code lise. Aussi, par moi ne pas l'obtenir au travail signifie que je suis conceptuellement manquant quelque chose – user1210708

+0

J'ai relayé votre question sur le canal de kotlin mou. Voyons voir si une réponse arrive ... –

Répondre

7

L'ambiguïté est ici parce que Kotlin peut interpréter l'expression cs += Pair(3, "c") soit comme opération création d'une nouvelle carte de la carte d'origine et la paire donnée et l'attribution de cette carte retour à la variable cs = cs.plus(Pair(3, "c")), ou opération muter la carte originale cs.plusAssign(Pair(3, "c"))

Pour désambiguïser cette situation, suivez la devise de Kotlin - faites val, pas var!

Lorsque vous déclarez cs en tant que val (variable non mutable), il ne peut pas être réaffecté une fois qu'il a été initialisé. La seule opération disponible est donc plusAssign.

+0

Pouvez-vous confirmer qu'il n'y a aucun moyen de résoudre l'ambiguïté si cs est un var et non un val? –

+0

Ilya - merci - confirmé et travaillant. Hou la la! Je ne sais pas trop quoi en faire (c'est vraiment un changement de modèle pour tout ce à quoi j'étais habitué dans presque tous les autres langages) ... mais je vais m'en occuper maintenant. L'autre chose est que cela peut-il comprendre cs.plusAssign() mais pas cs. + = Avec le même paramètre Pair. J'aurais naturellement pensé qu'il savait ce qui allait arriver et où il allait. – user1210708

+0

Désolé - la deuxième question que vous avez déjà répondu ... pensait juste à voix haute. – user1210708