arr = ['a','a','a','a','b','c','c','a','a','d','e','e','e','e']
enum = arr.each
#=> #<Enumerator: ["a", "a", "a", "a", "b", "c", "c", "a", "a", "d",
# "e", "e", "e", "e"]:each>
a = []
loop do
n = enum.next
a << n unless n == enum.peek
end
a #=> ["a", "b", "c", "a", "d"]
Enumerator # peek вызывает исключение StopIteration
, когда оно уже вернуло последний элемент перечислителя. Ядро # loop обрабатывает это исключение, прерывая цикл.
См. Массив # каждый и Перечислитель # следующий . Ядро # to_enum 1 может использоваться вместо Array#each
.
1 to_enum
- это метод экземпляра Object
, определенный в модуле Kernel
, но задокументированный в классе Object
. Понял?