1

チャンクして連結する慣用的な方法はありますか?

私が見つけた方法 (バイトの例):

    1.
import scodec.bits.ByteVector    

def byteChunk(n: Int): Process1[ByteVector, ByteVector] =
    process1.chunk(n).map(_.reduce(_ ++ _))

ただし、この場合、中間Vector(からchunk) は実際には必要ありません。

  1. 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
}
4

1 に答える 1