다음을 통해 공유


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 any, type 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}