BinaryFormat.Choice

構文

BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function

バージョン情報

既に読み取られた値に基づいて次のバイナリ形式を選択するバイナリ形式を返します。 この関数によって生成されるバイナリ形式の値は、以下のステージで機能します。

  • binaryFormat パラメーターで指定されたバイナリ形式が、値を読み取るために使用されます。
  • chooseFunction パラメーターで指定された選択関数に値が渡されます。
  • 選択関数は値を調べ、2 番目のバイナリ形式を返します。
  • 2 番目のバイナリ形式が、2 番目の値を読み取るために使用されます。
  • 結合関数を指定した場合は、最初の値と 2 番目の値が結合関数に渡され、結果値が返されます。
  • 結合関数が指定されない場合は、2 番目の値が返されます。
  • 2 番目の値が返されます。

省略可能な type パラメーターは、選択関数から返されるバイナリ形式の種類を示します。 指定できる値は、type anytype list、または type binary です。 type パラメーターが指定されない場合は、type any が使用されます。 type list または type binary が使用されると、システムはバッファー処理された値ではなく、ストリーミングの binary または list の値を返せる場合があります。そうすることで、形式を読み取るために必要なメモリの量を減らすことができます。

例 1

バイトのリストを読み取ります。要素の数は最初のバイトによって決まります。

使用方法

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

出力

{3,4}

例 2

バイトのリストを読み取ります。要素の数は最初のバイトによって決まり、読み取られた最初のバイトは保持されます。

使用方法

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.Record([
            length = length,
            list = BinaryFormat.List(BinaryFormat.Byte, length)
        ])
    )
in
    listFormat(binaryData)

出力

[length = 2, list = {3, 4}]

例 3

バイトのリストを読み取ります。要素の数は最初のバイトによって決まり、ストリーミング リストが使用されます。

使用方法

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

出力

{3, 4}