From e9865f00665972cc869d9bf5dac4146dc418198d Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Sun, 8 Aug 2021 23:32:50 +0200 Subject: [PATCH] Simplify func.iterate --- func.lua | 17 +++++++---------- test.lua | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/func.lua b/func.lua index 238fc2e..5128ae3 100644 --- a/func.lua +++ b/func.lua @@ -35,17 +35,14 @@ function values(...) return function() return unpack(args) end end --- Equivalent to `for x, y, z in iterator(...) do callback(x, y, z) end` -function iterate(callback, iterator, ...) - local function _iterate(iterable, state, ...) - local function loop(...) - if ... == nil then return end - callback(...) - return loop(iterable(state, ...)) - end - return loop(iterable(state, ...)) +-- Equivalent to `for x, y, z in iterator, state, ... do callback(x, y, z) end` +function iterate(callback, iterator, state, ...) + local function loop(...) + if ... == nil then return end + callback(...) + return loop(iterator(state, ...)) end - return _iterate(iterator(...)) + return loop(iterator(state, ...)) end function for_generator(caller, ...) diff --git a/test.lua b/test.lua index 9f0fceb..3b3f19c 100644 --- a/test.lua +++ b/test.lua @@ -33,7 +33,7 @@ do assert(tab[key] == value) tab[key] = nil end - func.iterate(check_entry, pairs, tab) + func.iterate(check_entry, pairs(tab)) assert(next(tab) == nil) tab = {a = 1, b = 2}