我已经将Lua嵌入到我的C应用程序中,并试图通过以下方法了解为什么在C代码中创建了一个表:
lua_createtable(L, 0, numObjects);
返回Lua后,当我调用以下命令时,会产生一个零的结果:
print("Num entries", table.getn(data))
(其中“数据”是lua_createtable在上面创建的表)
表中显然有数据,因为我可以通过以下方式遍历每个条目(string : userdata)对:
for key, val in pairs(data) do
...
end
但是为什么table.getn(数据)返回零呢?
我正在改进我们在中为机器人玩家处理Lua脚本的方式。目前,每个机器人都有自己的L实例,我们试图通过交换环境表来让它们共享一个。注意,机器人可能是完全不同的脚本。
我意识到这个方法在Lua5.2中是不推荐的,但是我们目前使用Lua,它仍然使用Lua5.1。这个游戏是用C++写的。
所以..。
首先,我们创建一个环境,并称之为:
// Create a table with room for 0 array and 1 non-array elements
lua_createtable(L, 0, 1); // -- tab
// Set the globals
从Pandoc2.0版本开始,就有了编写的能力。但是,在Pandoc2.0中,我发现在元素表上使用Lua的pairs并不能显示表中的所有键。
下面是一个很小的例子来说明这一点。在filter.lua中,我有:
function Para(elem)
io.stderr:write("A: " .. type(elem) .. "\n")
for k, v in pairs(elem) do
io.stderr:write("B: " .. k .. "\n")
end
io.stderr:write(
我很难找到并理解如何将一个表从lua传递到c++
我所拥有的:
Lua档案:
-- lua script for sending table data
io.write("lua table to send")
tableexample = {x = 1, y = 2, z = 100}
return tableexample
c/c++侧
L = lua_open();
luaL_openfile(L, "luafile");
... call the function...
luaLdofile(L, luafile);
int result;
result
我想做这样的事情:
table1 = myFunc("Arg1")
table2 = myFunc("Arg2")
for key,value in pairs(table1) do print(key,value) end
for key,value in pairs(table2) do print(key,value) end
我可以使用类似如下的语法将表添加到Lua的全局作用域中:
pLuaVM.NewTable("test");
((LuaTable)pLuaVM["test"])["A"] = 1
如果这篇文章的标题有误导性,我很抱歉,我是Lua的新手,我不知道该怎么做。我想为表的每个元素创建一个本地变量,然后打印它。 由于我的英语不是很好,我的知识也不是很好,所以我会加一个例子来解释一下: testTable = { test1 = "Test 1", test2 = "Test 2", test3 = "Wow so many test" }
for ?? in testTable do ?????? end
print(test1)
print(test3) Output should then be:
Test 1
Wow s
有以下代码,用于从C++创建Lua表:
// set first element "1" to value 45
lua_pushnumber( state, 1 );
lua_pushnumber( state, 45 );
lua_rawset( state, -3 );
// set the number of elements (index to the last array element)
lua_pushliteral( state, "n" );
lua_pushnumber( state, 1 );
我正在调试模式下尝试一个非常简单的lua脚本,并检查ARGV。
local jobExists = redis.call('exists', ARGV[1])
if jobExists then
return false
end
并且,我运行调试器如下:
redis-cli --ldb --eval ./is_running.lua 0 , user:root
我可以在程序中访问ARGV1的值,它工作得很好。但是当我试图打印时,它说“没有这样的变量”。
lua debugger> print ARGV[1]
No such variable.
lua debugge
有两个脚本文件,其中包含以下脚本
//parent.lua
function scope()
local var = "abc"
require "child"
end
//child.lua
print(var)
这样,child.lua将打印一个nil值,因为parent.lua中的作用域不会向模块公开其本地特性。我认为是这样的,因为require指令是在这个范围内声明的,并且是在var声明之后声明的。我的愿望是将子元素的所有行完全注入到父元素中。子脚本只是为了更好的可读性而导出。如何传递本地作用域?loadfile()和dofile()
我正试图在Lua中构建一个,我尝试了几种方法,但我发现自己面临着以下问题:对于这种情况,Lua的表太小了。如果我只想创建一个包含所有数字的表(见下面的例子),那么即使只有1/8 (.),这个表也太“小”了。(我承认这个数字很大).
max = 600851475143
numbers = {}
for i=1, max do
table.insert(numbers, i)
end
如果我在我的Windows机器上执行这个脚本,就会有一条错误消息,上面写着:C:\Program Files (x86)\Lua\5.1\lua.exe: not enough memory。在我的Lin
我创建了一个空表t,然后尝试使用函数破坏来设置它为零。在函数中,表变为零,但在函数之外,直到我显式地将它设置为零,它才发生任何变化。
有没有方法通过使用Lua中的函数将表设置为零?
local t = {}
local function destroy(input)
print("in function",input)
input = nil
print("in function",input)
end
print(t)
destroy(t)
print(t)
t = nil
print(t)
创建公共Lua函数(如print()、pairs()或ipairs() )的本地副本是否有价值?
示例:
local _print = print
local _pairs = pairs
local _ipairs = ipairs
for i, v in _ipairs(someTable) do
_print(v)
end
我见过一些Lua用这个写的,我想知道这样做是否有什么好处(性能或其他方面)?
我( lua newbie/3天)试图调用存储在lua表中的函数,如下所示
function sayhello()
return "hello";
end
function saygoodbye()
return "goodbye";
end
funct = {
["1"] = sayhello,
["2"] = saygoodbye,
["name"] = "funct"
};
function say(ft,index)
local name = ft.name;
如果我将“本地”函数定义为:
局部函数调度(归档)coroutine.resume(收益率)端
...and我想从C++调用这个函数,我不认为我可以使用lua_getglobal()调用:
m_pThreadState = lua_newthread(m_MasterLuaState);
//Load/define the above "Dispatch" routine local to this thread.
luaL_loadbuffer(m_pThreadState, m_ScriptBody, strlen(m_ScriptBody),"Console
我试图把浮标向量赋给Lua的全局变量。
首先,当我将向量赋值给一个已经键入表的变量时,我的代码工作得很好。
但是,当我将向量赋值给非表变量时,它会崩溃.(例如零、数字、字符串)
这是我的密码。
// get global table
lua_getglobal(L, "mytab");
// if it is table, clear table
if(lua_istable(L, -1)) {
lua_pushvalue(L, -1);
lua_pushnil(L);
while (lua_next(L, -2)) {
在Lua参考手册中,它指出每个值都有一个类型,它可能是本地、全局、表字段类型之一。我的问题是在Lua中匿名函数的类型是什么?匿名函数有什么生命周期?我只是举个例子。
local co = coroutine.create( function () print "hi" end )
print(coroutine.status(co))
我已经在我的框架中创建了一个围绕LuaBridge的包装器,这样我就可以轻松地将LuaBridge替换为另一个库。我有一些类可以在LuaBridge中注册,作为框架初始化的一部分。然后,我可以在Lua中轻松地访问或实例化这些类。当我想调用已在框架init中注册的类/表上的自定义方法时,就会出现这个问题,我已经在Lua中定义了这个方法。
function MyObject:OnUpdate()
self:Init()
end
如果我试图通过传递一个OnUpdate实例来调用MyObject,以便能够利用self,则会得到以下错误:
“尝试索引用户数据值(本地'self')”
我正在运行ScrapySplash,并试图将在Lua中创建的一个表传递给Parse方法。如果我试图访问这个表,我会得到一个类型错误:'SplashJsonResponse‘object is not subscriptable’。
我的Lua脚本如下:
script = '''
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(0.5))
img =
假设我有一个名为"test.lua“的文件,其中包含以下几行:
--[[ test.lua --]]
local f = function()
print"local function f in test.lua"
end
f_generate = function()
local fun = loadstring(" f()")
-- local env = getfenv(1)
-- set(fun,env)
return fun
end
f_generate()()
--[[ end of test.lua--]]
因为装入字符串是
在Lua命令行中,当我向如下脚本传递参数时:
lua myscript.lua a b c d
我可以从全局arg表中读取脚本和参数的名称。arg包含脚本名,arg1 - arg#arg包含其余的参数。这个表的奇怪之处在于,它在索引0处有一个值,而其他每个Lua数组都在1处开始索引。这意味着在像这样迭代它时:
for i,v in ipairs(arg) do print(i, v) end
输出只考虑索引1-4,不打印脚本名。#arg的计算值也是4,而不是5。
这个决定有什么好的理由吗?起初,这让我大吃一惊,我不得不证实手册没有弄错。
我正在用C++开发一个游戏引擎,使用Lua来定义NPCs。
我可以这样定义一个原型的NPC:
orc =
{
name = "Generic Orc",
health = 100
}
function orc:onIdle()
print("Orc idles...")
end
然后用entitySpawn(orc)生成一个"Orc“的实例。这是一个C++函数,它从给定表中读取健康和姓名等值,使用给定值在C++中创建一个实体对象,并为特定的NPC创建一个Lua表。
现在,我希望在Lua中的orc.health变量和C++中相应实