Goのiotaの正体
今までよく考えずに使っていのでメモ.
先日,会社のslackで以下のplaygroundがshareされた.
雑に(0, 2, 4)
かなぁと思いつつも(1, 5, 9)
で無い確信もなかった.
実行してみると正解は,
A = 0 B = 2 C = 4
なるほど.
そもそもiota
ってなんだっけ?とGoの仕様書を読みにいく.
Its value is the index of the respective ConstSpec in that constant declaration, starting at zero.
なるほど,これって定数宣言の中の定数リストのindexだったのか.
今まで雑にiota
使えばインクリメントされて〜みたいな意識だったので理解を改めた.
その上でさっきのコードや仕様に載ってるサンプルコードを読んでみるとなるほど確かに. そりゃそうなるわ.
const ( bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0 (iota == 0) bit1, mask1 // bit1 == 2, mask1 == 1 (iota == 1) _, _ // (iota == 2, unused) bit3, mask3 // bit3 == 8, mask3 == 7 (iota == 3) )
改めて,他の言語仕様で培われた色メガネでGoの仕様を捉えてはいけないなと思った.
自戒を込めて.