Module:UtilsFunction: Difference between revisions

From Zelda Wiki, the Zelda encyclopedia
Jump to navigation Jump to search
(Created page with "local p = {} function p.noop(...) return unpack({...}) end -- @args {fn1, fn2, ..., fnN} -- @returns A single function whose arguments are passed to fn1. Output of fn1 i...")
 
mNo edit summary
Line 2: Line 2:


function p.noop(...)  
function p.noop(...)  
return unpack({...})
return ...  
end  
end  



Revision as of 03:00, 11 March 2020

The functions in this module return other functions, namely iterators. It also contains utility functions for functional programming. Lua error in Module:Documentation/Module at line 630: attempt to call field 'memoize' (a nil value).


local p = {}

function p.noop(...) 
	return ... 
end 

-- @args {fn1, fn2, ..., fnN}
-- @returns A single function whose arguments are passed to fn1. Output of fn1 is passed to fn2, and so on.
-- Similar to https://lodash.com/docs/#flow
function p.pipe(...)
	local functions = {...}
	return function(...)
		local state = {...}
		for _, fn in ipairs(functions) do
			state = {fn(unpack(state))}
		end
		return unpack(state)
	end
end

-- http://lua-users.org/wiki/RangeIterator
function p.range(a, b, step)
  if not b then
    b = a
    a = 1
  end
  step = step or 1
  local f =
    step > 0 and
      function(_, lastvalue)
        local nextvalue = lastvalue + step
        if nextvalue <= b then return nextvalue end
      end or
    step < 0 and
      function(_, lastvalue)
        local nextvalue = lastvalue + step
        if nextvalue >= b then return nextvalue end
      end or
      function(_, lastvalue) return lastvalue end
  return f, nil, a - step
end

return p