【问题标题】:Set lua obj to nil from C++从 C++ 将 lua obj 设置为 nil
【发布时间】:2018-03-31 15:06:14
【问题描述】:

如果我有一个向 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

【问题讨论】:

    标签: lua


    【解决方案1】:

    不,你不能那样做。

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

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

    【讨论】:

    • 好的,谢谢。不确定是否有办法获取底层对象指针来操作它并以某种方式反映在 lua 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多