[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: lists with nil play nice for Lua 5.2
- From: Irayo <irayo.lt@...>
- Date: Tue, 31 Jul 2007 12:20:12 -0500
Norman Ramsey wrote:
Perhaps Lua 5.2 can address the policy disorder by
providing a value 'table.hole' whose sole purpose is to be distinct
from every other value (including nil) :-)
This makes the most sense to me out of any of the other solutions.
Nil in tables is not "nothingness"--it means, technically, that the key
is non-existent. So, asking Lua if a specific table element is nil is,
in essence, asking if that element is non-existent. Setting a table
element to nil specifically is just *telling* Lua that the element
doesn't exist. Lua doesn't handle non-existent elements because they
*don't exist*. So you can't expect to be able to tell Lua that an
element doesn't exist and then have it know that you meant that the
element existed, but was blank.
People use the value 'nil' in such a way as to say "nothing". 'blah =
nothing'. But if you're writing that with a nil, you're telling Lua
that blah doesn't exist. A "hole" or "blank" value, as Norman
suggested, addresses this by being able to differentiate between
t = nil; -- a nonexistant element, and
t = table.hole; -- an element that exists, but has no properly
#t = 2, because 'hole' is has a value. Of course, I rather think we
could come up with a more friendly name than "hole"--like maybe
"blank". I dunno.
Users can continue using nil if they want, and use all the work-arounds
to have iterators work in sparse tables, which means it's fully
backward-compatible. Nothing changes except the addition of another
element to the table library (as far as I know). Other users can
properly use new functions.
It may also be useful to define a function in such a way that f(a) is
"(a==nil) or (a==table.hole)", so that you can check whether a value is
nil *or* a hole.
As always, I'm not a Lua expert and I don't know what most people in the
community are looking for; this just seems to be a very simple and
elegant solution to a long-lasting problem. Feel free to get all up in
my grill if you disagree--I want to see what others think.