realmente me gusta Tie::File, lo que le permite tie
una serie de líneas de un archivo. Puede modificar la matriz de cualquier manera, y cuando haya terminado con ella, untie
, y el contenido del archivo se modifica en consecuencia.¿Cómo podría volver a implementar Tie :: File en Scala?
me gustaría volver a implementar este tipo de comportamiento en Scala, y esto es lo que tengo hasta ahora:
class TiedBuffer(val file:File) extends ArrayBuffer[String] {
tieFile
def untie = {
val writer = new PrintStream(new FileOutputStream(file))
this.foreach(e => writer.println(e))
writer.close
this
}
private def tieFile = this ++= scala.io.Source.fromFile(file).getLines()
}
Sin embargo, los "operadores" definidos en el ArrayBuffer regresan varias clases, diferentes a la mía, por ejemplo:
println((new TiedBuffer(somefile) +: "line0").getClass)
me da immutable.Vector
. Podría limitar la clase a un conjunto muy pequeño de métodos predefinidos, pero pensé que sería bueno si pudiera ofrecerlos a todos (foreach/map/...).
¿Qué debería heredar de, o cómo debería abordar este problema de modo que tenga una interfaz de tipo array de líquidos, lo que me permite modificar el contenido de un archivo?
BOUNTY: para ganar la recompensa, se puede mostrar un ejemplo que hace uso de CanBuildFrom
para realizar esta tarea?
Para que lo sepas, Tie :: File en realidad es más compleja de lo que usted muestra aquí.No solo lee el archivo cuando lo ata y lo escribe cuando lo desata. Lee y escribe el archivo mientras trabaja con la matriz (con algunas optimizaciones para mejorar el rendimiento). Pero incluso una implementación básica como esta aún sería útil. – cjm
@cjm, lo sé, por supuesto. Tie :: File es mucho más complejo que lo que muestro aquí. Pero quería que las personas que están leyendo esto entiendan claramente lo que sucede y por qué este módulo es útil. – Senthess