다음을 통해 공유


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}