lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]





On Dec 6, 2012, at 18:45, Sven Olsen <sven2718@gmail.com> wrote:


> Unfortunately, it ("for k,v in t do ..." syntax) simultaneously obscures the function of the code.

I do not understand what you mean- could you elaborate on this?

Basically, while I also don't like the proliferation of "in pairs(...)" boilerplate, I have problems with the details of John's approach. Vanilla Lua's generic for syntax is already pretty complex, and�under the self iterating objects patch the

� for <vars> in <explist> do

syntax gets�significantly�more complicated, because there's a switch on the type of the first result of <explist>.�

Consider:

� for k,v in t do

The programmer may think that this is simply code for walking through the table -- but the truth is that it's something considerably more complex, as t can legally be either a table or function iterator, and which way it's interpreted depends on it's raw type. �In the case that t is a table, there's 2 different metatable lookups that will impact the result (__iter and __pairs).

If all we really want is to reduce boilerplate pairs() calls, there's no need to hack the VM. �It's sufficient to just add a new transformation rule to the parser.

-Sven

PS: I'm still agonizing over candidate table iteration syntax. �At this point, I think my favorite is:

for k,v == t do�

but it appears that

for k,v = t do

would also work, as we could intercept the numeric for logic in the case that there's no stated upper limit.

Not to repeat, but isn't�

for k, v in next, t do

perilously close? Not to discourage syntax hacking.

While your at it, make me named arguments with default values that mirrors the syntax sugar for calling a function with a single table:

x = function{y = 3, z = {foo = "when is this eval-ed and is it still a default, or a literal?"}}

Lots of thorns are there...