แชร์ผ่าน


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 อย่างใดอย่างหนึ่ง หากไม่ได้ระบุพารามิเตอร์ typetype 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}