Iota is a Ruby module that emulates the iota keyword(?) from Google’s Go programming language. Here is the example from golang.org/doc/effective_go.html:
type ByteSize float64 const ( _ = iota; // ignore first value by assigning to blank identifier KB ByteSize = 1<<(10*iota); MB; GB; TB; PB; YB; )
The equivalent Ruby Iota code is:
require 'iota' include Iota set_iota 1 iota(%w(KB MB GB TB PB YB)) do |i| 1 << i * 10 end
MarkCC gives a simpler example:
type Color int; const ( RED Color = iota; ORANGE = iota; YELLOW = iota; GREEN = iota; BLUE = iota; INDIGO = iota; VIOLET = iota; )
And the Ruby Iota code:
RED = iota; ORANGE = iota; YELLOW = iota; GREEN = iota; BLUE = iota; INDIGO = iota; VIOLET = iota
OK, but that is painfully inefficient. Let’s go back to the array notation:
iota %w(RED ORANGE YELLOW GREEN BLUE INDIGO VIOLET)
Aaand… that’s all. This is of course one of the least innovative things about the Go language, but we can perhaps strive to implement more.