[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Basic question on weak keys
- From: TNHarris <telliamed@...>
- Date: Wed, 13 Jun 2012 22:12:47 -0400
On Wednesday, June 13, 2012 05:59:54 PM Andrew Starks wrote:
>
> Why nil? I thought that since a[b] was not weak, it would keep it as a
> reference? What does __mode ="k" do if an object is collected when it
> is used in a table as a key? Can someone be so kind as to provide an
> example?
>
As has been mentioned, you are not testing what you think you're testing.
Consider this instead.
a = {}
b = {}
a[b] = "foo"
for k,v in pairs(a) do print(k,v) end
--> table: 0x18066a0 foo
b = nil
collectgarbage('collect')
for k,v in pairs(a) do print(k,v) end
--> table: 0x18066a0 foo
In contrast,
a = setmetatable({}, {__mode="k"})
b = {}
a[b] = "foo"
for k,v in pairs(a) do print(k,v) end
--> table: 0xd9f8b0 foo
b = nil
collectgarbage('collect')
for k,v in pairs(a) do print(k,v) end
-->
-----
-- tom
telliamed@whoopdedo.org