Scala donne la possibilité de déballer un tuple en plusieurs variables locales lors de l'exécution de diverses opérations, par exemple si j'ai des donnéestuple Déballer directement dans la classe dans scala
val infos = Array(("Matt", "Awesome"), ("Matt's Brother", "Just OK"))
alors au lieu de faire quelque chose de laid comme
infos.map{ person_info => person_info._1 + " is " + person_info._2 }
Je peux choisir la plus élégante
infos.map{ case (person, status) => person + " is " + status }
Une chose que je On s'est souvent demandé comment décompacter directement le tuple en, par exemple, les arguments à utiliser dans un constructeur de classe. J'imagine quelque chose comme ceci:
case class PersonInfo(person: String, status: String)
infos.map{ case (p: PersonInfo) => p.person + " is " + p.status }
ou encore mieux si PersonInfo
a des méthodes:
infos.map{ case (p: PersonInfo) => p.verboseStatus() }
Mais bien sûr, cela ne fonctionne pas. Excuses si cela a déjà été demandé - je n'ai pas été capable de trouver une réponse directe - y a-t-il un moyen de faire cela?
Totalement fonctionne - c'est à peu près exactement ce que je cherchais. Merci – ohruunuruus
Vous n'avez pas besoin du 'unapply'. – Dima
Aussi, je ne vois pas comment 'cas p @ (_: String, _: String) => Personne.tupled (p) .verboseStatus()' est mieux que 'case (nom, statut) => Personne (nom, statut) .verboseStatus' – Dima