lua-users home
lua-l archive

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


On Jan 25, 2010, at 4:02 AM, Richard Hundt wrote:

> David Burgess wrote:
>> On 25/1/2010 12:28 PM, Mark Hamburg wrote:
>>>    function pushenv( newenv )
>>>        local oldenv = getfenv( 1 ) -- However one gains access to it...
>> POUNCE.  Methinks that the indoend thing would aided by a currentenv() function...
> 
> here's a hackish version:
> 
> function currentenv()
>   local getlocal = debug.getlocal
>   local e = nil
>   local x = 0
>   while true do
>      x = x + 1
>      local n,v = getlocal(2, x)
>      if not n then break end
>      if n == "(environment)" then
>         e = v
>      end
>   end
>   return e
> end

The need to scan for a specially named local demonstrates just how hard it is to implement and how potentially expensive it is to execute a function to get the current environment in the presence of the in-do-end construct.

Mark