Share via


BinaryFormat.Choice

Sözdizimi

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

Hakkında

Önceden okunmuş bir değere göre bir sonraki ikili biçimi seçen ikili biçimi döndürür. Bu işlev tarafından üretilen ikili biçim değeri aşamalar halinde çalışır:

  • parametresi tarafından binaryFormat belirtilen ikili biçim, bir değeri okumak için kullanılır.
  • değer parametresi tarafından belirtilen choice işlevine chooseFunction geçirilir.
  • Choice işlevi değeri inceler ve ikinci bir ikili biçim döndürür.
  • İkinci ikili biçim, ikinci bir değeri okumak için kullanılır.
  • Combine işlevi belirtilirse, birinci ve ikinci değerler combine işlevine geçirilir ve sonuçta elde edilen değer döndürülür.
  • Combine işlevi belirtilmezse, ikinci değer döndürülür.
  • İkinci değer döndürülür.

İsteğe bağlı type parametre, choice işlevi tarafından döndürülecek ikili biçimin türünü gösterir. , type anytype listveya type binary belirtilebilir. type Parametresi belirtilmezse kullanılırtype any. veya kullanılıyorsatype list, sistem arabelleğe alınan akış veya değer yerine akış binary veya list değer döndürebilir ve bu da biçimi okumak için gereken bellek miktarını type binary azaltabilir.

Örnek 1

Öğelerin sayısının ilk bayt tarafından belirlendiği bayt listesini okuyun.

Kullanım

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

Çıkış

{3,4}

Örnek 2

Öğelerin sayısının ilk bayt tarafından belirlendiği bayt listesini okuyun ve ilk bayt okumasını koruyun.

Kullanım

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)

Çıkış

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

Örnek 3

Akış listesi kullanarak öğelerin sayısının ilk bayt tarafından belirlendiği bayt listesini okuyun.

Kullanım

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

Çıkış

{3, 4}