Мне нравятся все эти предложения, но я нашел Генератор в стандартной библиотеке, и я думаю, что это больше похоже на то, что я хотел сделать:
spinChar=Generator.new{ |g|
['|','/','-','\\'].cycle{ |x|
g.yield x
}
}
#then
spinChar.next
#will indefinitly output the next character.
Обычные array index
приращения с модулем на замороженном массиве кажутся самыми быстрыми.
Нить Влада изящная, но не совсем то, что я хотел. А в spinner class
приращение в одну строку было бы лучше, если бы Ruby поддерживал i++
, как GLYPHS[@i++%GLYPHS.length]
Макс spinner closure
с push-shift мне кажется немного интенсивным, но результирующий синтаксис почти такой же, как этот Генератор. По крайней мере, я думаю, что это закрытие с proc там.
Чака with_spinner
на самом деле довольно близко к тому, что я хотел, но зачем ломать голову, если вам не нужно использовать генератор, как указано выше.
Вадим, спасибо за указание, что generator
будет медленным.
"Here's a test of 50,000 spins:"
user system total real
"array index" 0.050000 0.000000 0.050000 ( 0.055520)
"spinner class" 0.100000 0.010000 0.110000 ( 0.105594)
"spinner closure" 0.080000 0.030000 0.110000 ( 0.116068)
"with_spinner" 0.070000 0.030000 0.100000 ( 0.095915)
"generator" 6.710000 0.320000 7.030000 ( 7.304569)