sequence_object:next()
-
object
sequence_object
¶ -
sequence_object:
next
()¶ Генерация и выдача следующего значения.
Простой алгоритм для генерации:
- В первый раз вернуть НАЧАЛЬНОЕ значение.
- Если предыдущее значение плюс значение УВЕЛИЧЕНИЯ меньше, чем МИНИМАЛЬНОЕ значение, или больше, чем МАКСИМАЛЬНОЕ значение, будет переполнение, поэтому либо выдать сообщение об ошибке (если цикл не задан –
cycle
=false
) или вернуть МАКСИМАЛЬНОЕ значение (если цикл задан –cycle
=true
– иstep
< 0), или вернуть МИНИМАЛЬНОЕ значение (если цикл задан –cycle
=true
– иstep
> 0).
Если ошибки нет, сохранить результат, который становится «предыдущим значением».
Например, предположим, что для последовательности „S“:
min
== -6,max
== -1,step
== -3,start
= -2,cycle
= true,- предыдущее значение = -2.
Тогда
box.sequence.S:next()
вернет -5, потому что -2 + (-3) == -5.Затем
box.sequence.S:next()
снова вернет -1, потому что -5 + (-3) < -6, что будет переполнением, которое вызовет цикл, аmax
== -1.Для данной функции необходимы права на запись („write“) на последовательность.
Примечание
Данную функцию не следует использовать в транзакциях между движками (транзакции, в которых используется и движок memtx, и движок vinyl).
Чтобы увидеть предыдущее значение, не изменяя его, сделайте выборку из системного спейса _sequence_data.
-