[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: BUG in table.concat
- From: "Leo Razoumov" <slonik.az@...>
- Date: Tue, 1 Jul 2008 11:38:59 -0400
On Tue, Jul 1, 2008 at 4:06 AM, Eric Tetz <erictetz@gmail.com> wrote:
> I just read the link Petite provided, and it's 100% apropos. Go read it. :)
>
Thanks a lot everyone who replied. Let us see what the manual really says:
(1) Definition of table.concat
http://www.lua.org/manual/5.1/manual.html#pdf-table.concat
"table.concat (table [, sep [, i [, j]]])
Given an array where all elements are strings or numbers, returns
table[i]..sep..table[i+1] ··· sep..table[j].
The default value for sep is the empty string, the default for i is 1,
and the default for j is the length of the table.
If i is greater than j, returns the empty string."
NOTE: the definition above never explicitly addresses the issue of
arrays with holes.
Is a hole an element with nil as a value (nil is nither string nor number)??
See below.
(2) Arrays with holes are discussed here
http://www.lua.org/manual/5.1/manual.html#2.2
"The type table implements associative arrays, that is, arrays that
can be indexed
not only with numbers, but with any value (except nil). Tables can be
heterogeneous;
that is, they can contain values of all types (except nil).
[...snip...]
Like indices, the value of a table field can be of any type (except nil). "
NOTE: the manual explicitly says that nil cannot be a value in an
array or table (nil also cannot be a valid key).
Direct interpretation of the paragraph above: "t[2]=nil means that
array t does not contain an element t[2]"
It is different from "t[2] exists and has a value of nil".
(3) another discussion of arrays with holes
http://www.lua.org/manual/5.1/manual.html#2.5.5
"For a regular array, with non-nil values from 1 to a given n, its
length is exactly that n,
the index of its last value. If the array has "holes" (that is, nil
values between other non-nil values),
then #t may be any of the indices that directly precedes a nil value
(that is, it may consider any such nil value as the end of the array)."
NOTE: according to (3) arrays can have elements with nil as a value,
contradiction with (2) "the value of a table field can be of any type
(except nil)."
My head is spinning:-)
I think the manual should bee more specific of what a t[key]= nil really means
(A) t[key] element exists and is set to nil
(B) t[key] element is absent from the table/array and has not material value
--Leo--
Thanks,
--Leo--