İngilizce dilinde oku

Aracılığıyla paylaş


BinaryFormat.Group

Sözdizimi

BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function

Hakkında

Parametreler aşağıdaki gibidir:

  • binaryFormat parametresi anahtar değerinin ikili biçimini belirtir.
  • group parametresi, bilinen öğe grubu hakkında bilgi sağlar.
  • İsteğe bağlı extra parametresi, beklenmeyen herhangi bir anahtarı izleyen değer için ikili biçim değeri döndürecek bir işlev belirtmek için kullanılabilir. extra parametresi belirtilmezse, beklenmeyen anahtar değerleri varsa bir hata oluşur.

group parametresi, öğe tanımlarının listesini belirtir. Her öğe tanımı, aşağıdaki gibi 3-5 değer içeren bir listedir:

  • Anahtar değeri. Öğeye karşılık gelen anahtarın değeri. Bu, öğe kümesi içinde benzersiz olmalıdır.
  • Öğe biçimi. Öğenin değerine karşılık gelen ikili biçim. Bu, her öğenin farklı bir biçime sahip olmasını sağlar.
  • Öğe oluşumu. Öğenin grupta kaç kez görünmesinin beklendiğine ilişkin BinaryOccurrence.Type değeri. Mevcut olmayan gerekli öğeler hataya neden olur. Gerekli veya isteğe bağlı yinelenen öğeler, beklenmeyen anahtar değerler gibi işlenir.
  • Varsayılan öğe değeri (isteğe bağlı). Varsayılan öğe değeri öğe tanımı listesinde görünüyorsa ve null değilse, varsayılan değer yerine kullanılır. Yinelenen veya isteğe bağlı öğeler için varsayılan değer null, yinelenen değerler için varsayılan değer ise boş bir { } listesidir.
  • Öğe değeri dönüşümü (isteğe bağlı). Öğe değeri dönüştürme işlevi öğe tanımı listesinde varsa ve null değilse, döndürülmeden önce öğe değerini dönüştürmek için çağrılır. Dönüştürme işlevi yalnızca öğe girişte görünüyorsa çağrılır (hiçbir zaman varsayılan değerle çağrılmaz).

Örnek 1

Aşağıda, anahtar değeri tek bir bayt olan ve grubun 4 öğe içermesi beklenen bir durum varsayılmaktadır; tüm öğeler, anahtarın ardından gelen bir bayt veri içermektedir. Öğeler girişte aşağıdaki gibi görünür:

  • Anahtar 1 gereklidir ve zaten 11 değeriyle görünür.
  • Anahtar 2 yineler ve 22 değeriyle iki kez görüntülenir ve sonuç olarak { 22, 22 } değeri elde eder.
  • Anahtar 3 isteğe bağlıdır ve görünmez ve null değeriyle sonuçlanır.
  • Anahtar 4 yineler, ancak görüntülenmez ve { } değeriyle sonuçlanır.
  • Anahtar 5 grubun bir parçası değildir, ancak 55 değeriyle bir kez görünür. Ek işlev 5 anahtar değeriyle çağrılır ve bu değere karşılık gelen biçimi döndürür (BinaryFormat.Byte). 55 değeri okunur ve atılır.

Kullanım

let
    b = #binary({
        1, 11,
        2, 22,
        2, 22,
        5, 55,
        1, 11
    }),
    f = BinaryFormat.Group(
        BinaryFormat.Byte,
        {
            {1, BinaryFormat.Byte, BinaryOccurrence.Required},
            {2, BinaryFormat.Byte, BinaryOccurrence.Repeating},
            {3, BinaryFormat.Byte, BinaryOccurrence.Optional},
            {4, BinaryFormat.Byte, BinaryOccurrence.Repeating}
        },
        (extra) => BinaryFormat.Byte
    )
in
    f(b)

çıkış

{11, {22, 22}, null, {}}

Örnek 2

Aşağıdaki örnekte öğe değeri dönüşümü ve varsayılan öğe değeri gösterilmektedir. Anahtar 1 ile yinelenen öğe, List.Sumkullanılarak okunan değerlerin listesini toplar. 2 anahtarına sahip isteğe bağlı öğenin varsayılan değeri null yerine 123'tür.

Kullanım

let
    b = #binary({
        1, 101,
        1, 102
    }),
    f = BinaryFormat.Group(
        BinaryFormat.Byte,
        {
            {1, BinaryFormat.Byte, BinaryOccurrence.Repeating,
              0, (list) => List.Sum(list)},
            {2, BinaryFormat.Byte, BinaryOccurrence.Optional, 123}
        }
    )
in
    f(b)

Çıkış

{203, 123}