我在C/++中有一个LUA回调,我正在尝试使用lua_gettop()来检测一个可选的第一个参数。问题是lua_gettop(L) == 1总是正确的,即使我在LUA中没有提供任何参数。 下面是我用C/++编写的回调函数的基础知识: int LuaFile::l_cpp_my_callback(lua_State *L) {
LuaFilePtr my_this = lua_map_[L];
if ( lua_gettop(L) == 0 ) {
// I never get here
} else if(lua_gettop(L) == 1) {
我在Lua中有一个在表上操作的函数,它反复向表中添加条目:
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
if (CheckSomething(name, value))
table[name] = value
end;
end;
end;
我知道这是快速的;Lua有一个很好的哈希表算法。但是现在我需要将我的部分功能分开,这样我就可以对它进行单元测试:
fun
我试图通过使用C将函数值存储在弱表中来创建函数值的GC终结器。
首先,我用纯Lua5.2编写了一个原型:
local function myfinalizer()
print 'Called finalizer'
end
function myfunc()
print 'Called myfunc'
end
local sentinels = setmetatable({}, { __mode='k' })
sentinels[myfunc] = setmetatable({}, { __gc=myfinalizer })
my
使用C++,lua5.1,luabind 0.7
Lua代码:
-- allocates near 8Mb of memory
function fff()
local t = {}
for i = 1, 300000 do
table.insert(t, i)
end
return t
end
C++代码:
{
luaL_dostring(lua_state, "return fff()");
luabind::object obj(luabind::from_stack(ls, -1));
}
lua_gc(l
假设我有一个从C端拥有的指针,我希望以userdata的形式推入Lua堆栈。在不牺牲指定特定元表的能力的情况下,实现这一点的最佳方法是什么?
我最初的想法是使用一个轻量级的用户数据,但从我读到的来看,所有轻量级的用户数据共享一个公共的元表。这是不可取的,因为它将强制我的所有c-sided对象的通用行为。
考虑到我希望为Lua分配的对象重用元表,只需将一个不同的this指针传递给metamethods,我的第二个想法就是将一个人工this指针附加到userdata对象。
struct ud
{
struct T* ptr;
struct T data
我想在lua中创建一个具有已定义函数的Agent类。所以,如果我有一个lua文件soldier.lua,比如:
function Agent:init()
io.write("Agent init\n")
if self then
self.x = 4
self:test()
end
end
function Agent:test()
io.write("Agent test\n")
end
从C代码中,我可以加载它,创建Agent表,如下所示:
// create Agent class on Lua
lua_
在我的示例中,我创建了一个类Person,并为成员"Name“设置了一个默认值。我有一个构造函数和一个名为sayHi()的函数。每当我尝试调用该函数时,我都会得到一个错误:
lua: test.lua:22: attempt to call a nil value (method 'sayHi')
stack traceback:
test.lua:22: in main chunk
[C]: in ?
因此,据我所知,我正在创建一个新表,将该表的元表(setmetatable)设置为Person类,然后返回该表,这意味着我应该能够使用它
不确定有没有人遇到过这样的问题。以下是我的代码
在main.lua中:
local highScore = require("highScore")
local username = "myName"
local finishedTime = 12345
highScore:InsertHighScore(userName, finishedTime)
在highScore.lua中
function InsertHighScore(name,time)
print(name)
print(time)
-- other code
end
它看
如果我创建一个userdata对象并将其保存在一个表中,那么在C/C++中获得对它的引用,该引用有效的时间是多久?只要用户数据保存在Lua中的表中,C/C++中的引用是否保证有效?或者,Lua运行时是否会移动userdata对象,从而使C/C++引用无效?
我正在做的事情是:
// Initially, the stack contains a table
class Foo { ... };
lua_pushstring(L, "my_userdata");
void* mem = lua_newuserdata(L, sizeof(Foo));
new (mem) Foo(
如何使用c#将表传递给lua
我在使用LuaInterface,这是我的c#代码
using System;
using System.IO;
using System.Text;
using LuaInterface;
namespace GetLuaTable
{
class Program
{
static void Main(string[] args)
{
Lua netLua = new Lua();
CShaprFunction c
我有一个c++主机,在其中我使用tolua++向Lua公开了一些类。其中一个类具有一个函数,该函数应该注册来自lua的回调。因此,当C++代码需要调用Lua注册函数时,它可以调用。然而,该函数是一个表/类函数。我以前用字符串函数名(不是lua“类”的一部分)成功地做到了这一点,但我很好奇是否能够以某种方式存储Lua函数而不是函数名。
我定义我的lua类如下:
MyClass = {}
function MyClass:Create()
local obj = {}
-- copy all functions from MyClass table to this local