我有一个运行Lua脚本的应用程序。每个Lua脚本可能会运行多次。有些脚本甚至可能在按下键时每次都运行。
我希望这些脚本在每次运行之间被“重置”。也就是说,如果用户设置了变量Foo,则下一次运行时该脚本中不应存在Foo,直到用户再次定义它。
问题在于,如果我想要这样的行为,我需要每次创建一个新的lua_State,然后每次打开库,并解析脚本文件,这似乎非常不优化。
加载库可能是相当轻量级的操作(我假设),但解析脚本可能并非如此。
有没有一种方法可以重置Lua脚本的状态(即清除用户代码定义的变量),而无需创建新的lua_State并重新解析整个Lua脚本文件? 我只想让脚本文件在应用程序启动时解析一次,因为它们在运行时不会修改。
谢谢。 :)
编辑:我发现了这个主题,但它没有详细说明如何做到这一点:http://lua-users.org/lists/lua-l/2006-01/msg00493.html 编辑:lua_setfenv似乎与此相关。我会深入挖掘一下。
编辑:似乎在LUA 5.2之后就没有lua_setfenv了。由于我正在使用5.3,我必须设置环境(即名为_ENV的隐藏表格,其中存储变量)才能做到这一点,从而重新加载所有内容,这正是我不想做的...
我希望这些脚本在每次运行之间被“重置”。也就是说,如果用户设置了变量Foo,则下一次运行时该脚本中不应存在Foo,直到用户再次定义它。
问题在于,如果我想要这样的行为,我需要每次创建一个新的lua_State,然后每次打开库,并解析脚本文件,这似乎非常不优化。
加载库可能是相当轻量级的操作(我假设),但解析脚本可能并非如此。
有没有一种方法可以重置Lua脚本的状态(即清除用户代码定义的变量),而无需创建新的lua_State并重新解析整个Lua脚本文件? 我只想让脚本文件在应用程序启动时解析一次,因为它们在运行时不会修改。
谢谢。 :)
编辑:我发现了这个主题,但它没有详细说明如何做到这一点:http://lua-users.org/lists/lua-l/2006-01/msg00493.html 编辑:lua_setfenv似乎与此相关。我会深入挖掘一下。
编辑:似乎在LUA 5.2之后就没有lua_setfenv了。由于我正在使用5.3,我必须设置环境(即名为_ENV的隐藏表格,其中存储变量)才能做到这一点,从而重新加载所有内容,这正是我不想做的...