[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Construction of function pipeline wrapper in runtime
- From: "Alexander Gladysh" <agladysh@...>
- Date: Thu, 29 Jun 2006 21:35:57 +0400
Heh, I've found more cheap 'obvious' solution than I thought... Still,
I don't like that unpack(args) there. ;)
make_wrapper = function(...)
local types = {...}
local nargs = #types
return function(sink)
local f = sink
local args = { }
local n = nargs
local collector
collector = function(a)
local i = 1 + nargs - n
assert(type(a) == types[i], "Bad argument " .. i .. ", " ..
types[i] .. " expected")
args[i] = a
if n > 1 then
n = n - 1
return collector
else
return sink(unpack(args))
end
end
return collector
end
end
name_data = make_wrapper("string", "table")
foo = name_data(function(name, data) print(name, data.data) end)
foo "one" { data = "two" } -- Prints 'one two'.
Alexander.