Coroutines are often used to produce one value at a time.

Producer State

producer_state.lua
local limit = 
local produced = 0
local lastValue = 0
local state = "ready"

while produced < limit do
  produced = produced + 1
  lastValue = produced
  state = "yielded"
end

print("limit=" .. limit)
print("produced=" .. produced)
print("lastValue=" .. lastValue)
print("state=" .. state)
local limit = 
local produced = 0
local lastValue = 0
local state = "ready"

while produced < limit do
  produced = produced + 1
  lastValue = produced
  state = "yielded"
end

print("limit=" .. limit)
print("produced=" .. produced)
print("lastValue=" .. lastValue)
print("state=" .. state)
local limit = 
local produced = 0
local lastValue = 0
local state = "ready"

while produced < limit do
  produced = produced + 1
  lastValue = produced
  state = "yielded"
end

print("limit=" .. limit)
print("produced=" .. produced)
print("lastValue=" .. lastValue)
print("state=" .. state)
producer A producer can keep its position between steps. This example models that position with scalar counters.