为什么lua中这个类中的函数不能正确工作?

我在lua中运行了以下代码:

cal = {num1 = 0,num2 = 0,num3 = 0,num4 = 0,num5 = 0,num6 = 0}
function cal:new(n1,n2,n3,n4,n5,n6)
    local self = {}
    setmetatable(self,cal)
    self.num1 = n1
    self.num2 = n2
    self.num3 = n3
    self.num4 = n4
    self.num5 = n5
    self.num6 = n6
    return self
end
ea = cal:new(1,2,3,4,5,6)

ae = cal:new(7,8,9,10,11,12)

for k,va in pairs(ea) do print(va) end
for k,va in pairs(ae) do print(va) end

下面是输出结果:

1

2

5

6

3

4

7

8

11

12

9

10

为什么这些数字会被搞乱了?

点赞
用户107090
用户107090

pairs按照未指定的顺序遍历表。

手册中说:

即使是数字索引,枚举索引的顺序也未指定。

(这是基于nextpairs条目。)

2018-11-15 12:15:58
用户3574628
用户3574628

Lua 并未按照任何特定顺序存储表中的键。要按顺序打印字段的一种方法是添加另一种方法:

function cal:print()
  print(self.num1)
  print(self.num2)
  print(self.num3)
  print(self.num4)
  print(self.num5)
  print(self.num6)
end
2018-11-15 12:33:47