チャンクして連結する慣用的な方法はありますか?
私が見つけた方法 (バイトの例):
-
1.
import scodec.bits.ByteVector
def byteChunk(n: Int): Process1[ByteVector, ByteVector] =
process1.chunk(n).map(_.reduce(_ ++ _))
ただし、この場合、中間Vector
(からchunk
) は実際には必要ありません。
- process1.chunk からのコピー/貼り付けに基づく:
def byteChunk(n: Int): Process1[ByteVector, ByteVector] = {
def go(m: Int, acc: ByteVector): Process1[ByteVector, ByteVector] =
if (m <= 0) {
emit(acc) ++ go(n, ByteVector.empty)
} else {
def fallback = if (acc.nonEmpty) emit(acc) else halt
receive1Or[ByteVector, ByteVector](fallback) { in =>
go(m - 1, acc ++ in)
}
}
go(n, ByteVector.empty)
}
Process
既存の 'esを組み合わせて同じことを行う方法はありますか?
副次的な質問: ?repeat
の代わりに使用できます。++ go
これは前のものと同じですか:
def byteChunk(n: Int): Process1[ByteVector, ByteVector] = {
def go(m: Int, acc: ByteVector): Process1[ByteVector, ByteVector] =
if (m <= 0) emit(acc)
else ...
go(n, ByteVector.empty).repeat
}