卢阿:
a = {
b = "c",
d = {
e = "f",
g = "h"
}
}
setmetatable(a.d, {__ismt = true})
cfun(a) --call C function to iterate over table a
C:
int cfun(lua_State *L)
{
lua_pushnil(L);
while (lua_next(L, -2) != 0)
{
// iterate over t
我最近从ScriptFodder购买了MaterialBoard。我正在编辑组列表,以便它将显示大写和未连字符的组名,因此它将看起来像"Head Admin“,而不是head-admin。到目前为止一切都正常,但一旦它开始在变量名中使用连字符,它就得出了错误的结论:
[ERROR] addons/materialboard/lua/matboard_config.lua:76: '}' expected (to close '{' at line 73) near '='
1. unknown - addons/materialb
我现在正在编写一个脚本,遇到了一个路障,在这里我不太清楚如何检查一个值是否在Lua中的任何选定表中。
下面问题的示例脚本。
players = {213, 644}
helpers = {632, 965}
-- How would I check if a number (for example 632) was in either of these two tables?
我正在研究的框架可以用Lua模块进行扩展。每个模块的Lua源代码都是用我们的编译器编译的,编译器基于官方的Lua解释器,然后保存为字节码。这些单元必须满足某些要求:
-- Must be a non-empty string consisting only of characters in the range a-z
name = "foo"
-- Must not only be a number, but also an integer greater than zero
version = 1
如果在将Lua源代码编译到模块中时能够检查这些需求,那就太好了。这将使生活更
我有一个Lua程序,它似乎比它应该的速度慢。我怀疑问题是我一次向关联数组添加一个值,而表每次都必须分配新的内存。
似乎确实有一个table.setn函数,但在Lua 5.1.3下失败了:
stdin:1: 'setn' is obsolete
stack traceback:
[C]: in function 'setn'
stdin:1: in main chunk
[C]: ?
我在Google上搜索了一下,发现这个功能在Lua 5.1中被降级了,但是我找不到什么(如果有的话)替代了这个功能。
你知道如何在Lu
我已经注册了一个函数,它创建了一个轻型用户数据,供C++和lua使用。当我使用简单变量、ints和字符串进行测试时,这个部分工作得很好。我可以在lua中创建lightuserdata,当它是字符串和ints时,不会出现错误。然而,当我尝试使用表时,它会变得更加复杂。
std::string aString = lua_tostring(lua,-4);
第一个参数是正确的,因为它应该是字符串。
if (lua_type(lua,-3 == LUA_TTABLE)) //is true so i know it recognizes it as a table
{
auto t = l
我希望在lua中对一个表进行求和,但是如果我的表包含任何零值,则会出现问题。用户正在填写一个表单,以提供我的表值,这样他们就可以在表中留下一个字段为空。
我如何处理零值?求和时我想要0=0。
for key,value in pairs(contsum_data) do
chars ={',','%','$','₠','₡','₢','₣','₤','₥','₦','₧','₨','₩
尝试使用表作为从外部传递的用户生成数据的查找。 tab = { ['on'] = function(x) x=x+1 return x end,
['off'] = function(x) x=x+2 return x end,
['high']= function(x) x=x+3 return x end,
['low'] = function(x) x=x+4 return x end
}
do
local var=0
local userDat
我是lua的新手,所以如果这个问题太基本了,请原谅。我想知道是否有一个好方法来检查一个值是否不在lua表中。类似于: if 5 ~= t[1] or 5 ~= t[2] or 5 ~= t[3] ... then end 但没那么愚蠢。 这 for i,v in ipairs(t) do
if 5 ~= v then
end
end 实际上并不起作用,因为我想检查它是否没有出现在表中的任何地方,而不是它是否等于任何给定值。 到目前为止,我能想到的唯一可行的解决方案可能是 check = 0
for i,v in ipairs(t) do
if 5 == v then
在从我的Lua脚本调用的C函数中,我使用luaL_ref来存储对函数的引用。但是,如果我随后尝试使用返回的整数索引从不同的线程获取该函数,而该线程不是从相同的状态派生的,那么我得到的只是nil。下面是一个最简单的例子,似乎可以证明这一点:
// Assumes a valid lua_State pL, with a function on top of the stack
int nFunctionRef = luaL_ref(pL, LUA_REGISTRYINDEX);
// Create a new state
lua_State* pL2 = luaL_newstate();
lu
我正试图在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
是否可以在Lua中对多个值执行算术。我在windows 5.1.4中使用Lua。
目前,我必须将多个值放入一个表中,然后解压它们,我希望能够跳过这一步。
有可能。
以下是我目前的情况:
function numsToStr(...)
local nums = {}
for i,v in ipairs({...}) do
nums[i] = v + string.byte('A') - 1
end
return string.char(unpack(nums))
end
我想要的是能够做到这一点
function numsToSt
问题:如何使用C#对象(最好是匿名类型)将表从C#插入到“LuaInterface”脚本范围?
/// I want to do this, but it does not work
/// (complains that 'test' is userdata and not table
/// when I pass it to pairs() in the script)
//lua["test"] = new { A = 1, B = 2 };
/// another option
/// but building this string is a
我正在尝试从一个相当大的表(bigTable)接收数据,而getRow函数应该重新排列一些数据,以便更快地计算(下面的具体信息)。问题是其中一些值不存在(->是nil)。我想我已经解决了这个问题,我添加了if-Statement来检查这个值是否存在,但是我仍然会看到下面的错误。谢谢你的帮助。
我的职能(来自第46行):
function getRow(a, b)
row = {}
for d = 0, 3 do
if (bigTable[a + d][b + d]) then
table.insert(row, bigTable[a
我使用luaL_loadfile加载脚本,然后使用lua_pcall从游戏中加载脚本,并且想知道是否可以将它们加载到一个以其文件名命名的表中,而不是将它们加载到全局表中。
例如:
我有一个名为"Foo.lua“的文件,其中包含以下内容:
function DoSomething()
--something
end
加载后,我希望能够像这样访问它:
Foo.DoSomething()
谢谢!