partial

function partial( f, ... ) --> mfunc

Description

Takes a function f and fewer than the normal arguments() to f, and returns a function mfunc that takes a variable number of additional arguments. When called, the function mfunc calls f with and the additional arguments.

Parameters

f

The function that should be called.

The arguments of the function f that should be preset.

Return Values

mfunc

A function that calls f with the preset arguments( ).

Code

--ZFUNC-partial-v1
local function partial( f, ... ) --> mfunc
   --ZFUNC-append-v1
   local function append( arr, v, ... )
      table.insert( arr, v )
      if ... then
         for i, o in ipairs{ ... } do
            table.insert( arr, o )
         end
      end
      return arr
   end
   --ZFUNC-unwrap-v1
   local function unwrap( tab, i, j )
      local unpack = unpack or table.unpack
      return unpack( tab, i, j )
   end

   local args = { ... }
   return function( ... )
      return f( unwrap( append( args, ... ) ) )
   end
end

return partial

Examples

local t = require( "taptest" )
local partial = require( "partial" )

local function sum( a, b )
   return a + b
end

fixsum = partial( sum, 100 )

t( fixsum( 28 ), 128 )

t()

Inspired by

See also