Aracılığıyla paylaş


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:

  • binaryFormat parametresi tarafından belirtilen ikili biçim, bir değeri okumak için kullanılır.
  • Değer, chooseFunction parametresi tarafından belirtilen choice işlevine 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 parametresi, choice işlevi tarafından döndürülecek ikili biçimin türünü gösterir. type any, type listveya type binary belirtilebilir. type parametresi belirtilmezse type any kullanılır. type list veya type binary kullanılırsa, sistem arabelleğe alınmış bir değer yerine akışkan bir binary veya list değeri döndürebilir. Bu da biçimin okunması için gereken bellek miktarını 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

Bayt sayısının ilk bayt tarafından belirlendiği bir bayt listesini okuyun ve okunan ilk baytı saklayın.

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, öğe sayısının ilk bayt tarafından belirlendiği bir 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}