无法修改传递给lua的对象。

考虑以下使用[LuaBridge](http://vinniefalco.com/LuaBridge/Manual.html)将对象传递到lua脚本的示例:

明显,无法通过lua修改传递的变量:

同时,在处理脚本后,C++中的变量仍然保持其初始值。

但是,简单的标量数据类型(例如float),它们不是对象成员,可以被修改。我错过了什么吗?

编辑: 如果我用Test * t1 = new Test(10);或者Test t(10); Test * t1 =&t;代替Test t1(10); 甚至将t1传递给addVariable中的&t1。我真的不理解那个行为,可能有人解释一下吗?(address of address?)

点赞
用户847349
用户847349

LuaBridge 会复制你的参数。如果你自定义了一个复制构造函数并在那里设置了一个断点,你将从以下代码中跳转:

/**
  Push T via copy construction from U.
*/
template <class U>
static inline void push (lua_State* const L, U const& u)

这只是传递参数的约定。我猜想,这是因为数据具有 C++ 托管生命周期,这是一种安全特性。你可以使用新值重写你的数据,然后你将得到你想要的结果:

Core.t1.d = 12
t2 = Core.Test(10)
t2.d=12
print(Core.t1.d)
print(t2.d)
Core.t1 = t2
print(Core.t1.d)

输出:

10
12
12

你的 C++ 端的 t1 将有一个值为 12 的 d 值。

2013-09-25 14:11:21