lua-users home
lua-l archive

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


> On Fri, Jan 08, 2010 at 11:31:02AM -0200, Roberto Ierusalimschy wrote:
> > > > It will still change the environment of its caller, but for
> > > > compatibility only. This will be a documented compatibility behavior,
> > > > because it affects new code. (Outside the "in module() do ... end" you
> > > > will still be inside the module...)
> > > 
> > > I guess someone will be surprised by this then:
> > > 
> > >   in module("foo") do
> > >     ...
> > >   end
> > >   print() -- Fails rather unexpectedly.
> > 
> > That it was I meant by "it affects new code".
> 
> Maybe I missed something, but if the choice is between switching on a
> compatibility flag that makes the new 'in ... do ... end' construct pretty 
> unusable (see Mike's example) or switching it off and make all old code
> using 'module()' unusable... I'd prefer having no compatiblity flag at all,
> and maybe call it 6.0 instead of 5.2.

It would be trivial to include a new 'module' function (the only real
problem being how to call it) that does not change the environment.
New code uses "in newmodule() do ... end", old code continues to use
"module()".

But I do not undestand why the single module function is "unusable".
Usually chunks define a single module, so there is no code after the
'end' for this quite common usage. In particular, this style is
mandatory with the old module function. (That was the reason we opted
to not define a new module function.)

-- Roberto