Lua中table遍历ipairs和pairs的区别
pairs()函数基本和ipairs()函数用法相同, 区别在于pairs()可以遍历整个table, 即包括数组及非数组部分.ipairs()函数用于遍历table中的数组部分.
- local tableA = {1,2,suncle = "xxx",20};
- tableA[10] = 10;
- local tableB = {1,2,3};
-
- for k,v in ipairs(tableA) do
- print("ipairs tableA : k = " .. k .. " --- v = " .. tostring(v));
- end
-
- for k,v in pairs(tableA) do
- print("pairs tableA : k = " .. k .. " --- v = " .. tostring(v));
- end
-
- for k,v in ipairs(tableB) do
- print("ipairs tableB : k = " .. k .. " --- v = " .. tostring(v));
- end
-
- for k,v in pairs(tableB) do
- print("pairs tableB : k = " .. k .. " --- v = " .. tostring(v));
- end
另一种遍历连续的数组部分的方法:
- print("#tableA = " .. #tableA);
- for i=1,#tableA do
- print(tostring(tableA[i]));
- end
Lua中function的:和.区别
- local tableA = {};
- function tableA:funcA()
- print("funcA self = " .. tostring(self));
- end
-
- function tableA.funcB(self)
- print("funcB self = " .. tostring(self));
- end
-
- function tableA.funcC()
- print("funcC self = " .. tostring(self));
- end
-
- tableA:funcA();-- : 默认会把tableA传进funcA中,默认接受的是self
- tableA.funcA(tableA); -- . 没有默认的传递值,如果方法是定义成function tableA:funcA()形式的,需要现实的把tableA传进去
- tableA.funcA(); -- 这种方式 self为空
-
- tableA:funcB();--这种方式会默认传递自己,所以如果要用.去声明方法,需要现实的接受function tableA.funcB(self)
- tableA.funcB();--没有默认传值,所以self为空
- tableA.funcB(tableA);--显示的传值
-
- tableA:funcC();
- tableA.funcC();