[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Odd behaviour with multiple return values and varargs
- From: "Kacper Wysocki" <kacperw@...>
- Date: Wed, 12 Sep 2007 18:25:47 +0200
> "Tom Miles" <Tom@creative-assembly.co.uk> writes:
>
> > Okay, so I'm obviously missing something with this. Can anyone
> > explain the behaviour from this:
> >
> > function test1()
> > return 1, 2
> > end
> >
> > function test2()
> > return 3,4
> > end
> >
> > print(test1(), test2())
> >
> >> 1 3 4
> >
> > I would have expected it to output 1 2 3 4. Why doesn't it?
>
> Only the last function in a comma list has multiple return values
> respected.
On 9/12/07, Tom Miles <Tom@creative-assembly.co.uk> wrote:
> Is there a good reason for that? I assume there is, but I'ld like to
> know, as it seems a bit counter-intuitive.
At first sight, it's counter-intuitive.
Think about how you'd write the print() function so that it took
multiple variadic arguments(??).
in your example "print(test1(), test2())", if the output was "1 2 3
4", from the standpoint of print(), what part of the output is the
first argument, what part is the rest? How would you write such a
function in Lua?
-- count & print the arguments one per line
function myprint(...)
for i,v in pairs({...}) do
io.write(i .. ": " .. v .. "\n")
end
end
myprint(test1(), test2())
1: 1
2: 3
3: 4
So, I guess you're hoping the expansion of "print(test1(), test2())"
would be "print(1,2, 3,4)" but that would be rather difficult to
handle for anyone writing variadic functions - consider
function variadic(a, b, ...)
print(a, b, ...)
end
variadic(test1(), test2())
What should be in a? what should be in b?
-K
PS. Top-posting and HTML-encoded messages are generally accepted as no-noes.