lua-users home
lua-l archive

Problems with compat-5.1 release 3

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


Hello everybody,
I'm writing to report a problem with compat-5.1-r3. Currently, it is not 
possible create sub-modules with the same name as global variables. For 
example, one cannot create the module 'mymodule.assert' or 
'mymodule.error' if the basic library is loaded in the Lua state. To 
overcome this problem I did the following change:
--- compat-5.1.lua 2005年05月20日 18:40:50.000000000 -0300
+++ compat-5.1r3/lua/compat-5.1.lua 2005年05月26日 11:55:11.000000000 
-0300
@@ -8,7 +8,7 @@
 local LUA_OFSEP = ''
 local POF = 'luaopen_'
-local assert, error, getfenv, ipairs, loadfile, loadlib, pairs, setfenv, 
setmetatable, type = assert, error, getfenv, ipairs, loadfile, loadlib, 
pairs, setfenv, setmetatable, type
+local assert, error, getfenv, ipairs, loadfile, loadlib, pairs, rawget, 
setfenv, setmetatable, type = assert, error, getfenv, ipairs, loadfile, 
loadlib, pairs, rawget, setfenv, setmetatable, type
 local format, gfind, gsub = string.format, string.gfind, string.gsub
 --
@@ -51,7 +51,7 @@
 assert (type(f)=="string", "not a valid field name 
("..tostring(f)..")")
 for w in gfind(f, "[%w_]+") do
 if not t then return nil end
- t = t[w]
+ t = rawget(t, w)
 end
 return t
 end
There is also another small difference in compat-5.1-r3 with Lua 5.1 work 
6 that makes me wonder why. Is there any special reason why module 
function of Lua 5.1 work 6 does not return the namespace table used for 
the module? I ask that because sometimes it is interesting to access the 
table directly (e.g. to access numeric index positions or access its 
metatable). I know I can access it by means of getfenv or the like, but 
since module function may not only be called once, most probably at 
application/script start up, this may not impact its performance.
--
Renato Maia

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