将lua obj设置为来自C ++的nil

时间:2018-03-30 23:08:51

标签: lua

如果我在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

1 个答案:

答案 0 :(得分:3)

不,你不能这样做。

在函数的参数(Lua和C)中,您将获得一个简单的不可变值的副本,或者复杂可变值(表,线程,闭包)的引用副本。在该副本上保存nil不能使初始值从Lua端消失。

您需要一个可变的上下文来从C侧进行Lua侧的更改。即如果可擦除值存储在Lua端的表(或任何其他可索引对象)中,那么C端需要知道该值的表和索引。