[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Catching and passing multiple values
- From: Gavin Kistner <gavin@...>
- Date: Wed, 22 Feb 2006 19:59:10 -0700
On Feb 22, 2006, at 4:02 AM, David Given wrote:
On Wednesday 22 February 2006 05:01, Gavin Kistner wrote:
Is there a clean way to do the above (catch, save, and then later
return) in Lua? (I had hoped I could use a vararg expression
magically in place of "*matches" above, but obviously that doesn't
work.
You can do this:
[snip]
Wow, that's an impressive hack :)
I have no idea about how the internals of Lua work. Could someone
who does provide a really rough idea of how hard it would be to
extend the vararg syntax to work with:
local a, b, ... = func( )
I suppose the hard part about that is that it would only give you a
single vararg variable to work with at any time, which you'd need to
package/unpackage in order to save:
local saved_list = { ... }
local a, b, ... = func( )
local more = { ... }
... = unpack( saved_list )
-- later
return unpack( more ), ...
I don't want to turn Lua into Ruby, but Ruby's solution in this area
seems reasonably elegant. (Especially now that the length operator
in 5.1 has broken the ground for using odd non-standard characters as
unary prefix operators.)
I'd love to hear more discussion about adding a 'splat' operator to
Lua, so that:
local a, b, *more = manyValues( )
would be the same as:
local a, b, v1, v2, v3, ..., vn = manyValues( )
local more = { v1, v2, v3, ..., vn }
or the same as the syntax I (sort of) propose above:
local a, b, ... = manyValues( )
local more = { ... }
And far less important, that the syntax:
local a, b, c = *more
would be the same as:
local a, b, c = unpack( more )