Antes de ir más lejos, Te recomendaría evitar println
en una comprensión forzosa. A veces puede ser útil para rastrear un error que ocurre en el medio de una colección, pero de lo contrario conduce a un código que es más difícil de refactorizar y probar.
De forma más general, la vida suele ser más fácil si puede restringir dónde se produce algún tipo de efecto secundario. Así que en lugar de:
for (line <- myData) {
println("}, {")
}
Se puede escribir:
val lines = for (line <- myData) yield "}, {"
println(lines mkString "\n")
También voy a tomar una conjetura aquí que quería el contenido de cada línea en la salida!
val lines = for (line <- myData) yield (line + "}, {")
println(lines mkString "\n")
A pesar de que sería mejor aún si acaba de utilizar directamente mkString
- eso es para lo que sirve!
val lines = myData.mkString("{", "\n}, {", "}")
println(lines)
Nota cómo estamos produciendo una primera String
, a continuación, imprimirlo en una sola operación. Este enfoque puede dividirse fácilmente en métodos separados y utilizarse para implementar toString
en su clase, o para inspeccionar el String generado en las pruebas.
Como la respuesta de @ Nicolas ya lo indica, con frecuencia es mucho más fácil si puede refactorizar su comportamiento deseado para actuar de manera diferente para la * primera * iteración, en lugar de la última. Es trivial identificar la primera iteración. –
+1 para usar scala –