lua-users home
lua-l archive

Re: Basic question on weak keys

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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

AltStyle によって変換されたページ (->オリジナル) /