J'essaie d'effectuer un remplacement println
qui génère des collections imbriquées dans un format plus lisible. Ceci est mieux illustré par un exemple: Je voudrais List(Set(Vector(1.0,1.1), Vector(0d)), Set(Vector("a", "b", "c"), Vector("x", "y")))
à imprimer commeTableaux dans la méthode d'impression récursive
List
Set
Vector(1.0, 1.1)
Vector(0.0)
Set
Vector(a, b, c)
Vector(x, y)
Ce serait beaucoup plus facile sans effacement de type, mais je suis venu avec
def rprint(a: Any, indent: Int = 0): Unit = a match {
case x: Traversable[_] =>
if (x.isEmpty)
rprint(x.toString, indent)
else x.head match {
case y: Traversable[_] => {
rprint(x.toString.takeWhile(_ != '('), indent)
x foreach {i => rprint(i, indent + 2)}
}
case y => rprint(x.toString, indent)
}
case x => println(" " * indent + x)
}
Je J'ai du mal à faire fonctionner cela avec Arrays, sans duplication de code substantielle. J'aimerais qu'ils travaillent de la même manière que pour les autres collections. Plus précisément:
Les tableaux ne sont pas
Traversable
pourrait convertir des tableaux en utilisant
genericArrayOps
à ArrayOps qui estTraversableOnce
, maisTraversableOnce
n'a pas de méthodehead
, je ne peux pas voir comment obtenir un élément pour vérifier son typetoString
ne fonctionne pas tout à fait comme les autres collections (utiliser.deep
)
Quelle est la meilleure façon d'incorporer des tableaux dans cette méthode, ou existe-t-il une approche différente qui fonctionnerait mieux?
C'est très cool, et ça gère aussi les itérateurs, ce qui est génial! (Je peux y aller maintenant et bidouiller ma scala-library.jar pour l'inclure dans Predef) –