lua-users home
lua-l archive

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


On Tue, 12 Jan 2010, Juris Kalnins wrote:
>
> do a=1
>  do dynamic a=2
>    g() -- access to a gives 2
>  end   -- a == 1
> end
>
> where 'dynamic' is like 'local' in perl :)

function dynamic(t,f)
  local save = {}
  for k,v in pairs(t) do
    save[k] = _G[k]
    _G[k] = v
  end
  f()
  for k in pairs(t) do
    _G[k] = save[k]
  end
end

do a=1
  dynamic({ a=2 },function()
    g() -- access to a gives 2
  end)
  -- a == 1
end

If there were hooks on the environment of 5.2 "in" blocks so that the code
knows when the block is finished, you could perhaps write something like

do a=1
  in dynamic{ a=2 } do
    g() -- access to a gives 2
  end
  -- a == 1
end

Tony.
-- 
f.anthony.n.finch  <dot@dotat.at>  http://dotat.at/
GERMAN BIGHT HUMBER: SOUTHWEST 5 TO 7. MODERATE OR ROUGH. SQUALLY SHOWERS.
MODERATE OR GOOD.