如果我在Lua中有一个C公开函数,我将一个userdata对象作为参数传递给lua,那么C函数是否可以在lua一侧将该变量实际设置为'nil'?
// From C++
static void Delete(lua_State* L){
// the first param will be userdata and I want to set it so after this call in lua happens whatever was passed in will be nil
}
-- from lua
local obj = CreateUserDataObject()
Delete(obj)
--I would want obj to now be nil
答案 0 :(得分:3)
不,你不能这样做。
在函数的参数(Lua和C)中,您将获得一个简单的不可变值的副本,或者复杂可变值(表,线程,闭包)的引用副本。在该副本上保存nil不能使初始值从Lua端消失。
您需要一个可变的上下文来从C侧进行Lua侧的更改。即如果可擦除值存储在Lua端的表(或任何其他可索引对象)中,那么C端需要知道该值的表和索引。