Мне действительно нравится Tie :: File , который позволяет вам tie
массив строк файла.Вы можете изменить массив любым способом, и когда вы закончите с ним, вы untie
создадите его, и содержимое файла изменится соответствующим образом.
Я хотел бы переопределить такое поведение в Scala, и это то, что я имею до сих пор:
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()
}
Однако «операторы», определенные в ArrayBuffer, возвращают различные классы, разныечем мой, например:
println((new TiedBuffer(somefile) +: "line0").getClass)
дает мне immutable.Vector
.Я мог бы ограничить класс очень небольшим набором предопределенных методов, но я подумал, что было бы неплохо, если бы я мог предложить все из них (foreach / map / ...).
От чего мне наследовать,или как мне подойти к этой проблеме, чтобы у меня был интерфейс, похожий на массив, который позволяет мне изменять содержимое файла?
BOUNTY : чтобы выиграть награду, вы можете показатьрабочий пример, который использует CanBuildFrom
для выполнения этой задачи?