私は実際にTie::Fileが好きで、tie
にファイルの行への配列を許可します。あなたは何らかの形で配列を変更することができます。そしてそれを完了するとuntie
となり、ファイルの内容がそれに応じて変更されます。ScalaでTie :: Fileをどのように再実装できますか?
私は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
を使用する実例を表示できますか?
Tie :: Fileは実際にはここに表示するより複雑です。解凍時に結びつけたときにファイルを読み込むだけではありません。配列を操作する際にファイルを読み書きします(パフォーマンスを向上させるためにいくつかの最適化を行います)。しかし、このような基本的な実装でさえ、依然として有効です。 – cjm
@cjm、もちろん分かります。 Tie :: Fileは私がここに示したものよりはるかに複雑です。しかし、私は、これを読んでいる人々が何が起きているのか、なぜこのモジュールが有用であるのかをはっきりと理解したかったのです。 – Senthess