[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: object addresses in Lua
- From: Vaughan McAlley <vaughan@...>
- Date: Tue, 31 May 2011 17:11:49 +1000
On 31 May 2011 15:35, Xingzhi Pan <vengeance.storm@gmail.com> wrote:
>> The pointer for some Lua values (lightuserdata,userdata,table,function,thread)
>> are used in the hash value when they are used as keys in a table. Either you
>> will have to change how those values are hashed, or you will have to re-hash
>> all values that you move.
>
> I don't quite understand "The pointer...are used in the hash value
> when they are used as keys in a table”. So you're saying for example
> when a function is used as a key in a table, its pointer is used "in
> the hash value"? What does "in the hash value" mean here? I suppose
> this function, as a key, can be used to retrieve a value (e.g., a
> string) from the table. According to you, how is this value connected
> to this function's pointer?
>
There’s a good explanation of hash tables at
http://en.wikipedia.org/wiki/Hash_table . This helped me understand
the ‘magic’ of hash tables. The hash value is a way of converting an
arbitrary value (number, string, pointer), that is a table key, into
an n-bit bucket value, via the chosen hash function. For a table,
function etc to be the key value in a table, Lua uses its pointer
because it will be a unique value. If its pointer changes, its bucket
number (via a hash of the pointer) will change and Lua will not be
able to retrieve its corresponding value. To rehash a table is to
recalculate all its keys into new buckets. This happens when a table
is resized.
Hope this helps,
Vaughan