From: | "Florian G(dot) Pflug" <fgp(at)phlo(dot)org> |
---|---|
To: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Jeff Davis <pgsql(at)j-davis(dot)com>, Andrew Dunstan <andrew(at)dunslane(dot)net>, pgsql-patches <pgsql-patches(at)postgresql(dot)org> |
Subject: | Re: variadic function support |
Date: | 2008-07-14 13:30:00 |
Message-ID: | 487B54D8.9020407@phlo.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
Pavel Stehule wrote:
>> One issue that just occurred to me: what if a variadic function
>> wants to turn around and call another variadic function, passing
>> the same array argument on to the second one? This is closely akin
>> to the problem faced by C "..." functions, and the solutions are
>> pretty ugly (sprintf vs vsprintf for instance). Can we do any
>> better? At least in the polymorphic case, I'm not sure we can :-(.
>> maybe with some flag like PARAMS?
>
> SELECT least(PARAMS ARRAY[1,2,3,4,5,6])
Just FYI, this is more or less how ruby handles variadic functions - a
"*" before the last argument in the function's *definition* causes all
additional arguments to be stored in an array, while a "*" before the
last argument in a function *call* expands an array into single arguments.
So, you could e.g do
def variadic1(a, b, *c)
# c is in array containing all parameters after second one.
end
def variadic_wrapper(a, *b)
variadic1("foobar", a, *b)
end
So there is precedent for the "flag idea" too. Plus, I kind of like the
idea of using the same syntax for both wrapping and unwrapping of
variadic arguments.
regards, Florian Pflug
From | Date | Subject | |
---|---|---|---|
Next Message | Pavel Stehule | 2008-07-14 13:58:32 | Re: variadic function support |
Previous Message | Pavel Stehule | 2008-07-14 13:17:32 | Re: variadic function support |