[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Why can't I do for...in on a table?
 
- From: Chris Marrin <chris@...>
 
- Date: Sun, 11 Sep 2005 20:46:47 -0700
 
I remember this thread passing by a couple of months ago, but I did not 
understand then, and I still don't understand now why I can't go like this:
    local t = { a = 1, b = "hello" }
    for p in t do
        print("t[",p,"] = ",t[p])
    end
This works in 5.0 and I use it extensively. Syntactically, it looks very 
nice to me, much nicer than table.foreach() or using pairs(). I know 
that pairs has the nice feature that it gives me back the already 
dereffed value. But I really dislike the inscrutability of this method. 
Also, it seems like it would be more efficient to use a table directly 
for a couple of reasons. First, the special code that must have been in 
place to handle a table directly would be faster than having to make a 
function call every time. And if I just wanted the property and not the 
value, pairs() will do a deref that I don't need. Admittedly in this 
case I was dereffing the property anyway. But in cases where I don't 
need to, seems like I don't have a way to do that anymore!
What problem was being caused by "for p in t do" ???
--
chris marrin              ,""$, "As a general rule,don't solve puzzles
chris@marrin.com        b`    $  that open portals to Hell" ,,.
        ,.`           ,b`    ,`                            , 1$'
     ,|`             mP    ,`                              :$$'     ,mm
   ,b"              b"   ,`            ,mm      m$$    ,m         ,`P$$
  m$`             ,b`  .` ,mm        ,'|$P   ,|"1$`  ,b$P       ,`  :$1
 b$`             ,$: :,`` |$$      ,`   $$` ,|` ,$$,,`"$$     .`    :$|
b$|            _m$`,:`    :$1   ,`     ,$Pm|`    `    :$$,..;"'     |$:
P$b,      _;b$$b$1"       |$$ ,`      ,$$"             ``'          $$
 ```"```'"    `"`         `""`        ""`                          ,P`