[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Problems with compat-5.1 release 3
- From: Renato Maia <maia@...>
- Date: Mon, 20 Jun 2005 18:25:33 -0300 (BRT)
> I guess the most common use is for a developer of a given module to
> write his own submodules, or at least realize that someone else might do
> it. At any rate, the getmetatable solution I suggested can be
> implemented by either.
True, but that wasn't exactly what I was talking about.
> Besides, the fact that this __index field is left behind is an unwanted
> artifact. I trully believe it should be removed even if you don't plan
> to use "mymodule.error" or the like. After all, the line
> c = socket.socket.socket.socket.socket.tcp()
> is ridiculous. :)
It would be really great to overcome this, but I'm afraid that I must have
missed something. Do you propose to set __index of module metatable to
nil? Won't this avoid the access to global variables by module functions?
What I mean is that the following doesn't work:
Lua 5.0.2 Copyright (C) 1994-2004 Tecgraf, PUC-Rio
> module "hello" function sayit() print "Hello World!" end
> getmetatable(hello).__index = nil
stdin:1: attempt to call global 'print' (a nil value)
stdin:1: in function 'sayit'
stdin:1: in main chunk
Additionally, in the case that the module writer decides to change the
__index for the module like you suggested earlier, if I set it to nil then
the particular semantics previously defined by __index won't work anymore
in any situation. So why bother to use rawset only at the module loading
> We definitely want to unify Compat-5.1 with Lua 5.1. We are trying to
> keep up with the work releases and will update to Compat-5.1 release 4
> pretty soon. What is that is different between release 3 and work6
> that is bothering you? I haven taken a close look yet.
One thing is that the code below works just like I expected it to do.
Lua 5.1 (work6) Copyright (C) 1994-2005 Tecgraf, PUC-Rio
> module "mymod" function op() print "I'm mymod.op" end
> module "mymod.error" function op() print "I'm mymod.error.op" end
Another little silly difference is the base module for Lua basic
functions. These little differences may not cause many problems now, but
some developers may be a little disappointed if they find out that their
Lua-5.0.2+Compat-5.1 compliant modules does not fit properly to the
package model in Lua 5.1. At least, I did! :o)