[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Changing tables during traversal: clearing and re-adding a field
- From: Rebel Neurofog <rebelneurofog@...>
- Date: Thu, 30 Jun 2011 17:03:54 +0400
> See the code: When it does t[k] =<some other value>, the field t[k] does
> not exist (it was erased two lines earlier), so it is assigning to a
> non-existent field, which is explicitly forbiden.
I see the point now. Undefined behavior is undefined behavior.
On the other hand, why not define it in a different way?
1. Assigning a value to some key reserves a slot (and fills it with a
value) in a table.
2. Assigning nil to existing value doesn't release a slot for a value.
3. Rehashing may delete reserved slots with nil for a value.
4. Assigning non-nil value to key with reserved slot is guaranteed to reuse it.
Is this the way Lua currently behaves or there's a trick about
toggling array/non-array keys?
Or maybe, these rules add unnecessary limitations for internal
implementations (though these rules extend semantics...)?
P. S. I'm not sure if it good proposal, just kinda too curious:-)