[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Getting the "ID" of an object.
- From: Hisham <hisham.hm@...>
- Date: Mon, 2 May 2011 02:16:59 -0300
On Mon, May 2, 2011 at 1:56 AM, Lorenzo Donati
<lorenzodonatibz@interfree.it> wrote:
> Hi all!
>
> I recently stumbled on an issue I cannot find a workaround for.
>
> When defining the __tostring metamethod for a a table, the old behaviour is
> completely lost, i.e. there is no "rawtostring" and no apparent way to
> concoct a substitute (without resorting to C).
>
> What I'd like is a way to get the unique IDs (I suppose they are the memory
> address) that Lua generates for the default string representation of tables,
> i.e. the NNN in
>
> tostring(t) --> "table: NNN"
>
> It doesn't seem that the debug library helps here either.
>
> I need the "NNN" above to include that ID into the string representation for
> my OOP objects when defining __tostring.
>
> I know that I could either:
> 1) generate an unique ID with a custom algorithm
> 2) upon creation, before attaching the metatable to the object being
> created, call tostring on the object and store the ID in a (weak?) table.
> 3) use a proxy and return the ID of the "private" object instead (preserves
> uniqueness because of the 1-to-1 relationship between proxies and objects)
Besides the options you gave, if what you want is to use the original
tostring() value within your custom __tostring, an option (hack?) is
to temporarily disable your custom __tostring, like this:
-------------
local tbl = {}
local meta = {}
local function meta_tostring(t)
meta.__tostring = nil
local s = tostring(t)
meta.__tostring = meta_tostring
return "Original tostring is "..s
end
meta.__tostring = meta_tostring
setmetatable(tbl, meta)
print(tbl)
-------------
In case you're using it for something else, I'd use one of the methods
you mentioned, like the weak table. But make sure you really need the
id -- for most situations where one would use an object id in other
languages, one can simply use the table itself as a key when coding in
Lua.
--
-- Hisham
http://hisham.hm/