lua-users home
lua-l archive

Re: Lua registry, environment, and threads.

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


On 2010年1月12日, 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.

AltStyle によって変換されたページ (->オリジナル) /