Compartir a través de


BinaryFormat.Choice

Sintaxis

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

Acerca de

Devuelve un formato binario que elige el formato binario siguiente según un valor que ya se ha leído. El valor de formato binario generado por esta función funciona en fases:

  • El formato binario especificado por el parámetro binaryFormat se usa para leer un valor.
  • El valor se pasa a la función de elección que especifica el parámetro chooseFunction.
  • La función de elección inspecciona el valor y devuelve un segundo formato binario.
  • El segundo formato binario se usa para leer un segundo valor.
  • Si se especifica la función de combinación, se pasan el primer y el segundo valor a esta función y se devuelve el valor resultante.
  • Si no se especifica la función de combinación, se devuelve el segundo valor.
  • Se devuelve el segundo valor.

El parámetro type opcional indica el tipo de formato binario que devolverá la función de elección. Puede especificar type any, type list o type binary. Si no se especifica el parámetro type, se usa type any. Si se usa type list o type binary, el sistema puede devolver un valor binary o list en secuencia en vez de uno almacenado en búfer, lo que puede reducir la cantidad de memoria necesaria para leer el formato.

Ejemplo 1

Leer una lista de bytes cuyo número de elementos viene determinado por el primer byte.

Uso

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

Salida

{3,4}

Ejemplo 2

Leer una lista de bytes cuyo número de elementos viene determinado por el primer byte y conservar el primer byte leído.

Uso

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)

Salida

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

Ejemplo 3

Leer una lista de bytes cuyo número de elementos viene determinado por el primer byte con una lista en secuencia.

Uso

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

Salida

{3, 4}