lua table本身的元表怎么修改

lua table本身的元表怎么修改,第1张

table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数字、字典等。

Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。

Lua table 是不固定大小的,你可以根据自己需要进行扩容。

Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。 例如stringformat表示使用"format"来索引table string。

1、剔除字符串中的“,”逗号

function LuaKill:findNum( str )

       local allStr = str ","

      local tabNum = {}

      while allStr do

              local len = stringlen( allStr )

              local m = stringfind( allStr, "," )

              local num = stringsub(allStr, 1, m-1)

              tableinsert( tabNum, 1, num )

             if m >= len then

                       allStr = nil

                       return    tabNum

             end 

            allStr = stringsub( allStr, m+1, len )

      end

     return tabNum

end

这个函数可以从字符串中剔除逗号拿到数据

比如:  str = "1,2,3,4,5,6,7,8,9,10"

调用    findNum( str )

返回一个装有  1到 10 数字的表{1,2,3,4,5,6,7,8,9,10}

2、从字符串中取数字

function LuaKill:findNum(  str  )

         local num = ""

         local len = stringlen( str )

         for i = 1, len do

                local assic = stringbyte( str, i )

                if assic <= 57 and assic>= 48 then

                            num = num stringsub( str, i, i )

                end

        end

       return tonumber( num)

end

例如:  str = “asdf123shjk”

find(str)  结果为: 123

3、Lua使用Switch

Lua中没有Switch关键字   但是我们在程序中很多时候都要用到,Lua也可以实现Switch,如下:

function LuaKill:switch( tag )

        local onButtonClicked = {

                    [1] = function()

                             print("tag = 1")

                   end,

                   [2] = function()

                             print("tag = 2")

                   end,

                  [3] = function()

                             print("tag = 3")

                   end,

        }

       onButtonClicked [tag]( )

end

根据Tag的不同调用 不同的函数

楼上两个坑爹么那样回答

首先我们要看一下我们要存储的对象

存储对象是一个lua的table结构

table结构在lua里可以看作是一种动态的数组

然而在lua里的table和C里的数组差别比较大,我们并不能直接把表简单的传过去,所以我们要把table转化成一个c里可以存储的方式,因此我们需要遍历一下lua里的表

下面是大概的思路 具体的代码你需要自己去写

namelist = {} --这个用来存储遍历后展开的表的索引

valuelist = {} --这个用来存储遍历后展开的每一个值

typelist = {} --用来保存变量的类型

function saveTable(t,parent)

parent = parent or ""

for i,v in pairs(t) do

tableinsert(namelist,i"#"parent) --将名字存入名字列表

tableinsert(typelist,type(v)) --将对应变量的类型存入列表

tableinsert(valuelist,v) --将变量存入列表

if type(v) == "table" then

saveTable(v,tostring(i)"#"parent)

end

end

end

这里就可以将一个完整的表拆成索引 对应值 以及类型 存到3个表里

然后将3个表 传给C,然后再由C把这个表重新组装起来

测试的话 这样

test = {1,2,3,4,{5,6,7},{{8},9}}

saveTable(test)

for i,v in pairs(namelist) do

print(v)

end

for i,v in pairs(valuelist) do

print(v)

end

for i,v in pairs(typelist) do

print(v)

end

就可以看到3个表的内部结构,然后C的话 只要通过类型判断处理方法,是表的话就再建个数组

然后索引按照namelist里进行按层拆分就可以获得了

tableconcat (table [, sep [, i [, j ] ] ])

元素是string或者number类型的table,每个元素连接起来变成字符串并返回。

可选参数sep,表示连接间隔符,默认为空。

i和j表示元素起始和结束的下标。

tableinsert (table, [pos ,] value)

在(数组型)表 table 的 pos 索引位置插入 value,其它元素向后移动到空的地方。pos 的默认值是表的长度加一,即默认是插在表的最后。

tableremove (table [, pos])

适用数组的情况

在表 table 中删除索引为 pos(pos 只能是 number 型)的元素,并返回这个被删除的元素,它后面所有元素的索引值都会减一。pos 的默认值是表的长度,即默认是删除表的最后一个元素。

以上就是关于lua table本身的元表怎么修改全部的内容,包括:lua table本身的元表怎么修改、Lua 技巧、c++怎么得到lua传进来的数组(数组的大小不确定,不能以字符串形式压入栈)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9303010.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存