[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Expanding an array out into a parameter list
- From: Peter Pimley <peter.pimley@...>
- Date: Sun, 11 Sep 2011 23:51:32 +0100
Dear Lua list,
Suppose I have a function from a third party that I cannot alter. It
takes a number (>1) of arguments, something like:
function foo (a, b)
print ("You supplied " .. a .. " and " .. b)
end
I'd like to be able to store the function as one value, and all the
parameters for a future call in another single value:
-- store parameters for a future call to "foo(23, 42)"
f = {func=foo, params={23, 42}}
If I did this, how would I go about calling the function with my
stored parameters? If I wrote "f.func(f.params)" it would be wrong;
instead of passing in two parameters I'm passing in a single array
that happens to have two elements. Inside foo, parameter b would be
nil. I need to somehow expand 'params' back from being a single
table/array to a number of separate parameters.
The best I can come up with is to use an anonymous "converter"
function, something like:
f = {
func = function(p) foo (p[1], p[2]) end,
params = {23, 42}
}
... but this requires me to know *at the time I write the code* how
many parameters the function takes.
Is there a prettier or more Lua-ish way?
Thanks,
Peter Pimley
PS: If the example is a bit dry for you; I'm playing with Xavante and
I want to store all the parameters to wsapi.xavante.makeHandler inside
a single rule's 'params' value.