共用方式為


BinaryFormat.Choice

語法

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

關於

傳回二進位格式,此格式會根據已讀取的值選擇下一個二進位格式。 此函式所產生的二進位格式值會分階段運作:

  • binaryFormat 參數所指定的二進位格式是用來讀取值。
  • 此值會傳遞給 chooseFunction 參數所指定的選擇函式。
  • 選擇函式會檢查值,並傳回第二個二進位格式。
  • 第二個二進位格式是用來讀取第二個值。
  • 如果已指定組合函式,則第一個和第二個值會傳遞給組合函式,並傳回產生的值。
  • 如果未指定組合函式,則會傳回第二個值。
  • 會傳回第二個值。

選擇性 type 參數表示選擇函式將傳回的二進位格式類型。 可以指定 type anytype listtype binary。 如果未指定 type 參數,則會使用 type any。 如果使用 type listtype binary,則系統可能會傳回串流 binarylist 值,而非緩衝的值,這可降低讀取格式所需的記憶體數量。

範例 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}