lua-users home
lua-l archive

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


On 11/12/12, Luiz Henrique de Figueiredo <lhf@tecgraf.puc-rio.br> wrote:
> Anyway, if you remove the outside declaration of a, then the code works
> as intended:
>
> local print=print
> do
>         local _ENV = require 'math'
>         print(pi)
> end

Let imagine that your source file is big enough, and sometime later
you will forget about usage of math.pi and you will add new local
variable at the beginning of the file:

-- new code at the beginning:
local pi = 40 -- plasticity index (of a soil)
<new code concerning soil properties>
-- your old code starts here:
do
        local _ENV = require 'math'
        do_something(sin(pi*alpha/180))  -- sin is the same, but pi has changed!
end

And new pi will take precedence over pi from math module.
How many time it will take you to debug your code to understand the reason?
Figuratively speaking, _ENV changes lexical scoping from "wrong end".
"With" statement would be absolutely correct here.