воскресенье, 2 июня 2019 г.

Спецификация Go: йота (iota)

В объявлении константы предварительно объявленный идентификатор iota представляет последовательные не типизированные целочисленные константы. Его значение является индексом соответствующего ConstSpec в объявлении константы, начиная с нуля. Его можно использовать для построения набора связанных констант:

const (
  c0 = iota  // c0 == 0
  c1 = iota  // c1 == 1
  c2 = iota  // c2 == 2
)

const (
  a = 1 << iota  // a == 1  (iota == 0)
  b = 1 << iota  // b == 2  (iota == 1)
  c = 3          // c == 3  (iota == 2, не используется)
  d = 1 << iota  // d == 8  (iota == 3)
)

const (
  u         = iota * 42  // u == 0     (не типизированная цельно-числовая (integer) константа)
  v float64 = iota * 42  // v == 42.0  (float64 константа)
  w         = iota * 42  // w == 84    (не типизированная цельно-числовая (integer) константа)
)

const x = iota  // x == 0
const y = iota  // y == 0

По определению, многократное использование iota в одном и том же ConstSpec имеет одинаковое значение:

const (
  bit0, mask0 = 1 << iota, 1<<iota - 1  // bit0 == 1, mask0 == 0  (iota == 0)
  bit1, mask1                           // bit1 == 2, mask1 == 1  (iota == 1)
  _, _                                  //                        (iota == 2, не используется)
  bit3, mask3                           // bit3 == 8, mask3 == 7  (iota == 3)
)

В этом последнем примере используется неявное повторение последнего непустого списка выражений.


Читайте также:


Комментариев нет:

Отправить комментарий