[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: 	maxn considered pointless. Was: Re: Lua 5.1 (final,rc) now available
 
- From: Rici Lake <lua@...>
 
- Date: Wed, 18 Jan 2006 11:48:49 -0500
 
On 18-Jan-06, at 10:48 AM, Asko Kauppi wrote:
Good list, Mike! :)
Some comments/questions, not necessarily for you, but in general..
1. Is #t NOT expected to work, if a table has both integer (1..N) and 
other (string, etc) keys?
If so, it's really too easy to mess it up, I hope #t would always find 
the 'N', no matter which other keys there are (note: hole issue is 
different).
I would have thought so, too.
On the other hand, maxn works with sparse arrays only if they're not 
"sparse at the end", as it were. I personally think this is simply a 
bug waiting to get a user of maxn, and that people who actually use 
sparse arrays should come up with their own protocol to record the 
"size" of the array. I've gone back to using a 'n' field, myself:
  function sparse(...)
    return {n = select('#', ...), ...}
  end
  function sparseadd(t, ...)
    local count = select('#', ...)
    local n = t.n
    for i = 1, count do t[n+i] = select(i, ...) end
    t.n = n + count
    return t
  end
  function sparsenext(t, i)
    for j = i + 1, t.n do
      if t[j] ~= nil then return j, t[j] end
    end
  end
  function sparsepairs(t)
    return sparsenext, t, 0
  end
  t = sparse(2, nil, nil, 4, nil)
  sparseadd(t, nil, 3, 7)
  for i, val in sparsepairs(t) do
    print(i, val)
  end
prints:
  1       2
  4       4
  7       3
  8       7
Q: What would happen if sparse* were implemented with maxn?