次の方法で共有


BinaryFormat.Choice

構文

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

バージョン情報

既に読み取られた値に基づいて次のバイナリ形式を選択するバイナリ形式を返します。 この関数によって生成されるバイナリ形式の値は、次の段階で動作します。

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

省略可能な type パラメーターは、choice 関数によって返されるバイナリ形式の型を示します。 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}