|
|
||
|
在 2016/8/5 19:22, Niccolo Medici 写道:
Let's say I have a C 'int' variable that holds a reference (what luaL_ref() returns). At the start of the program it's initialized to zero. Can I assume that zero means that it doesn't hold a reference, or must I explicitly initialize it to LUA_NOREF (which happens to be -2) ? (It's not that I'm being lazy. In reality I have several huge arrays of references (allocated and zero'ed with calloc()), not just one variable, and I want to skip the loops that are to initialize them.) A bonus question: if it's ok to assume luaL_ref() won't return 0, then why does LUA_NOREF equal -2 instead of simply being 0 ?
the manual says:
A reference is a unique integer key.
As long as you do not manually add integer keys into table t, luaL_ref ensures the uniqueness of the key it returns.
The constant LUA_NOREF is guaranteed to be different from any reference returned by luaL_ref.
all luaL_ref can guarantee is the uniqueness. current implementation use only positive integer keys.
Lua 5.3 use index 0 as a special key to keep track the unref-ed slots as a linked free list.
but it should be considered as implementation detail I think.
--
the nerdy Peng / 书呆彭 / Sent from Thunderbird