如何在使用 'load' 函数执行的字符串中访问参数

我想知道是否有一种方法可以让 'load' 函数从一个局部变量中获取变量值,而不是从全局变量中获取。

比如我有一个字符串 'trade.version == 2',我想在一个需要以 trade 作为参数的函数中使用 'load' 函数来执行它。

function doTest( trade, test )
  -- 在字符串 'test' 中,我希望任何对 'trade' 的引用都指向函数参数,而不是全局变量
  if ( assert(load("return "..test))() ) then
    -- 做一些操作
  end
end

a_userdata = { version = 2 }
-- 调用上面的函数
doTest( a_userdata , "trade.version == 2" )

[string "return trade.version == 2"]:1: attempt to index global 'trade' (a nil value)
stack traceback:
    [string "return trade.version == 2"]:1: in main chunk
    stdin:2: in function 'doTest'
    stdin:1: in main chunk
    [C]: in ?

作为一种解决方法,我定义了一个全局变量并且它运行得很好。 但是我想避免使用全局变量。

非常感谢

原文链接 https://stackoverflow.com/questions/40745318

点赞
stackoverflow用户6834680
stackoverflow用户6834680
function doTest( trade, test )
  -- 在字符串 'test' 中,我想让任何对 'trade' 的引用均指向函数参数,而不是一个全局变量
  if assert(load("local trade = ...; return "..test))(trade) then
    -- 做一些事情
    print('Yes, 版本等于2')
  end
end

a_userdata = { version = 2 }
-- 调用上面的函数
doTest( a_userdata , "trade.version == 2" )
2016-11-22 16:34:06