[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: [ANN] Lua 5.2.0 (rc2) now available
- From: HyperHacker <hyperhacker@...>
- Date: Fri, 25 Nov 2011 20:02:42 -0700
On Fri, Nov 25, 2011 at 19:17, Benoit Charland <benoitc@hotmail.com> wrote:
> Hi,
>
> I installed Lua 5.2 rc2 to try out the new features, and I was very
> pleased with the improvements over 5.1. However, I did find
> something that looks like an oversight in the table library when I
> tried the __len metamethod on a proxy table.
>
> In the reference manual, at the start of section "6.5 - Table
> Manipulation", we have:
>
>> Remember that, whenever an operation needs the length of a
>> table, the table should be a proper sequence or have a __len
>> metamethod
>
> The function descriptions also imply that using the table library with
> proxy tables will work. For example, the table.unpack definition
> mentions that it is equivalent to "return list[i], list[i+1], ..., list[j]", and
> that "By default, i is 1 and j is #list".
>
> The other functions are described with similar wording.
>
> However, a quick test reveals that it doesn't quite work:
>
> t = { 1, 2, 3 }
> proxy = setmetatable({}, {
> __index = t,
> __newindex = t,
> __len = function() return #t end
> })
>
> print(#proxy) --> prints 3, as expected
>
> print(table.unpack(proxy)) --> prints "nil nil nil", but I expected "1 2 3" as per the manual
>
> The problem is that all functions from the table library honor the
> __len metamethod, but not __index or __newindex. They use
> luaL_len to query the length of the sequence, but lua_rawgeti
> and lua_rawseti to access its elements. This isn't a showstopper,
> but it doesn't look like a logical or useful behaviour.
>
> For more consistency, lua_gettable and lua_settable should be
> used to access the elements (great for proxy tables), or lua_rawlen
> should be used to get the list length (same behaviour as Lua 5.1). In
> the latter case, the manual should be updated to reflect the fact that
> the raw length of the sequence is used in the table library.
>
> Benoit
>
>
Ouch. Wasn't this kind of issue the source of a lot of complaints in
5.1, that was supposed to be addressed in 5.2? Or am I just imagining
things...
--
Sent from my toaster.