[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: loadstring and accessing local variables
- From: Doug Rogers <doug.rogers@...>
- Date: Fri, 11 Dec 2009 19:20:36 -0500
Gert wrote:
> * On 2009-12-11 Michal Kottman <k0mpjut0r@gmail.com> wrote :
>> I have tried to achieve the same thing, and basically ended up
>> collectiong all the locals and upvalues using functions from debug
>> table,
> Yes, I was afraid I would end up using the debug library. I just
> realized locals are not part of the environment - which would be my
> first intuitive guess - but live in registers instead.
> Ok, nothing I can do about it then, thanks for your help!
Well, if you know where you're loading the string then you might know
the local variables that are likely to be used by the loaded code. You
can put them in a table whose its metatable has an __index set to the
global table, like:
var1 = "Hello"
local function one()
local var2 = "world"
local code = "print(var1, var2)"
chunk = loadstring(code)
local locals = { var2 = var2, }
setfenv(chunk, setmetatable(locals, { __index = _G }))
chunk()
end
one()
But that would require a little bit of maintenance as the code changes.
Doug
______________________________________________________________________________________
The information contained in this email transmission may contain proprietary and business
sensitive information. If you are not the intended recipient, you are hereby notified that
any review, dissemination, distribution or duplication of this communication is strictly
prohibited. Unauthorized interception of this e-mail is a violation of law. If you are not
the intended recipient, please contact the sender by reply email and immediately destroy all
copies of the original message.
Any technical data and/or information provided with or in this email may be subject to U.S.
export controls law. Export, diversion or disclosure contrary to U.S. law is prohibited.
Such technical data or information is not to be exported from the U.S. or given to any foreign
person in the U.S. without prior written authorization of Elbit Systems of America and the
appropriate U.S. Government agency.