[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Getting the "ID" of an object.
- From: Lorenzo Donati <lorenzodonatibz@...>
- Date: Mon, 02 May 2011 20:22:00 +0200
On 02/05/2011 7.16, Hisham wrote:
On Mon, May 2, 2011 at 1:56 AM, Lorenzo Donati
<lorenzodonatibz@interfree.it> wrote:
[snip]
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)
-------------
Right! Nice trick! Thanks!
I really didn't think of such a solution. My mindset is still too
accustomed to classical OOP behaviour of languages like Java & C++
(changing the methods of an object at runtime - really weird from such
languages' standpoint!).
I really wouldn't call it a hack: it just uses the dynamic nature of
Lua. Now that I see it I find it rather clean and elegant (unless I miss
something, such as hidden side effects or loopholes).
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.
Yes, I know that I can use tables as keys, thanks.
I need the ID only for debugging/logging purposes, just to build a more
detailed string representation of an object and tell apart two objects
which may happen to have the same "content", but different identity
(say, for example, two complex numbers having the same cartesian
components).
Thank you very much for the suggestion.
--
Lorenzo