将参数传递给lua_resume和lua_yield的目的是什么?
据我所知,在第一次调用lua_resume时,参数被传递给正在恢复的lua函数.这是有道理的.但是我希望对lua_resume的所有后续调用都会"更新"协程函数中的参数.然而事实并非如此.
将参数传递给lua_resume以使lua_yield返回的目的是什么?在协程下运行的lua函数是否可以访问lua_resume传递的参数?
据我了解,在Lua 5.2中,环境存储在名为的升值中_ENV。这使我在运行之前但在加载之后修改块的环境确实使我感到困惑。
我想加载具有某些功能的文件,并使用块将这些功能注入各种环境。例:
chunk = loadfile( "file" )
-- Inject chunk's definitions
chunk._ENV = someTable -- imaginary syntax
chunk( )
chunk._ENV = someOtherTable
chunk( )
Run Code Online (Sandbox Code Playgroud)
在Lua内部可能吗?我可以找到的唯一修改此升值的示例是C api(C api的另一个示例),但是我试图在Lua内部进行此操作。这可能吗?
编辑:我不确定使用调试库接受答案。的文档状态,该功能可以是缓慢的。我这样做是为了提高效率,这样就不必为了将变量定义注入到各种环境中而从字符串(或文件,甚至更糟)中解析整个块。
编辑:看起来这是不可能的:在Lua 5.2中重新创建setfenv()
编辑:我想对我来说最好的方法是绑定可以修改环境的C函数。尽管这是一种更烦人的解决方法。
编辑:我相信更自然的方法是将所有块加载到单独的环境中。通过设置引用块的全局副本的元表,这些可以被任何其他环境“继承”。加载后不需要任何升值修改,但仍允许使用这些函数定义的多个环境。