使用C++将lua对象设置为nil

如果我有一个在 Lua 中定义的用户数据对象,我可以将其作为参数传递到暴露给 Lua 的 C 函数中,该函数实际上可以在 Lua 一侧将该变量设置为 'nil' 吗?

// 来自C++

static void Delete(lua_State* L){
   // 第一个参数将是用户数据,我希望设置它以便在此调用在Lua中发生后,传递的任何内容都将为nil
}

-- 来自Lua
local obj = CreateUserDataObject()

Delete(obj)

-- 我希望obj现在是nil
点赞
用户5675002
用户5675002

不行,你不能用那种方式去做。

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

你需要一个可变的上下文,在C端进行更改才能在Lua端进行更改。也就是说,如果可删除的值存储在Lua端的表格(或任何其他可索引的对象)中,则C端需要知道该表格和该值的索引。

2018-03-31 06:55:21