What I find interesting is that an explicitly set nil value is not considered a "hole" in the table.
According to the documentation that shouldn't be. A bug?
By the way, I find the documentation wording very confusing:
The length of a table
t is defined to be any
integer index
n
such that
t[n] is not
nil and
t[n+1] is
nil;
moreover, if
t[1] is
nil,
n ***may*** be zero.
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).