[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: The new (5.0) for syntax
- From: Philippe Lhoste <PhiLho@...>
- Date: Thu, 13 Jun 2002 16:13:07 +0200 (MEST)
> > expList is a function which must return at least another function, and
that
> > can return a state (for persistance of data) and an initial value.
>
> It doesn't need to be a function. It is an expList, so it can also be
> two (or three) expressions. It is exactly the same as in a multiple
> assignment:
>
> a,b = f()
> a,b = e1, e2
Silly me, the name should have been a tip... And the readline example
tripped me.
You say it must be at least two expressions, but in your example, lines()
returns only a function, no state.
> > t = { "a", "b", "c" }
> > for i, k in nexti(t) do print(i, k) end
> > for k, v in next, t do print(k, v) end
> > for k, v in t do print(k, v) end
> > The results are identical. I am not sure to understand the second syntax
> > (with 'next').
>
> See previous remark. In the second syntax, you explicitly give the
> iteration function (`next') and the state (`t'). The third syntax is
> only a kind of syntactic sugar.
And it preserves backward compatibility, a good thing.
> > It seems I cannot write "for k in next do ... end", Lua reports 'next'
is
> > expecting a parameter, but which one it gets in the above line?
>
> According to your translation, uou are calling _func(_state, var1), where
> _func=next, but _state=nil.
If I understand correctly, actually 'nexti' is just a function returning
'next' and its parameter.
> Assert returns its argument (if it is not false); in the example this is
A point I didn't saw in Lua 4.0 manual (the given pseudo-code don't return
anything).
Either that's an evolution, or that's a point of documentation that can be
improved :-)
Likewise, I cannot see what closefile() (or now f:close()) returns.
> > But I am no longer sure of the advantage of this state over the previous
> > version...
> > Well, it looks more like OO, and I am probably missing some side effect.
>
> This is a matter of taste. The big advantage of using the state is when
> you don't need to create any new "object" (table, closure, etc.) to run
> the for. The `nexti' is an example.
>
> In "heavier" loops, the cost of an extra object is negligible. E.g.,
> in the file example, you already have to open the file, create a file
> handler, create several strings (the lines), etc. etc. An extra closure
> (or table) makes little difference to the total bill.
Plus when I wrote that, I wasn't aware of the real nature of expList... The
state has a life of its own.
Thank you for answering, Roberto. I admit I was expecting your feedback :-)
> BTW, you should add your explanation into the Wiki.
I wrote it a bit with this idea in mind :-) I add your anwsers and I will
paste it soon...
OK, I done it before sending this mail. I have put it in the "Learning Lua"
page, but it can be moved it is doesn't fit this place. It is located there:
http://lua-users.org/wiki/NewFor
Regards.
--
--=#=--=#=--=#=--=#=--=#=--=#=--=#=--=#=--=#=--
Philippe Lhoste (Paris -- France)
Professional programmer and amateur artist
http://jove.prohosting.com/~philho/
--=#=--=#=--=#=--=#=--=#=--=#=--=#=--=#=--=#=--
GMX - Die Kommunikationsplattform im Internet.
http://www.gmx.net