lua中数组中的索引负数

时间:2016-10-30 21:16:28

标签: arrays lua lua-table

问题:我有一个名为X[1:20]的数组。 z。我初始化为0开始。

我希望在向数组添加1之后将数字传递给数组的每个元素。所以我读取了数字并存储在局部变量local x= {} local number local z for i = 1, 20 do x [i] = 0; -- array initialization end for y = 1, 5 do z = number -- I am reading a "number" from hardware & it is a negative integer number x[z] = x[z]+1 ; end 中。有时"数字"可以是积极的和消极的。

但是,数组仅用于正数(即x [1 ... 20]) 当"数字"是负的lua给出错误信息,"尝试对字段'?'进行算术运算。 (零值)。

我该怎么办?

user-facing notices

4 个答案:

答案 0 :(得分:1)

这是因为你正在阅读x [z],而不只是分配它。 一个简单的解决方法是给它一个默认值。 例如:

    x[z] = (x[z] or 0) + 1

这将使代码假设x [z]默认等于零。

答案 1 :(得分:1)

您的初始化代码仅将数组X的正值设置为0.只需修改循环以初始化Z的所有可能值。

for i = -20, 20 do 
    x [i] = 0;  -- array initialization 
end 

假设Z的范围为-20到20。

负指数值有效,但有时会在使用ipairs()函数时导致意外行为。 ipairs()函数只会迭代从索引1开始的表的值,直到第一个未初始化的(零)条目。

t = {}
for i = -2, 2 do t[i] = i end

print("all values")
for i = -2, 2 do
  print(i, t[i])
end

print("positive integer values")
for k, v in ipairs(t) do
  print(k, v)
end

给出以下结果:

all values
-2  -2
-1  -1
0   0
1   1
2   2
positive integer values
1   1
2   2

答案 2 :(得分:0)

您无法在Lua中使用负数索引表。你几乎没有可能:

  1. 键入使用此字符串将索引转换为字符串和索引。它将使您的表关联(您可以使用任何字符串索引):

    z  = tostring(number)
    

    如果您的指数没有任何边界

  2. ,这很好
  3. 如果您的数字间隔有限(-20到20),则可以在访问值时转换为正数:

    MIN_VALUE = -20
    z = number - MIN_VALUE
    

    这种方法应该提供更好的性能,因为阵列是直接处理的。

答案 3 :(得分:0)

你永远不会将“数字”设置为任何东西,因此它会给你错误

  

尝试对字段'?'执行算术运算(零值)

注意单词“a nil value”,因为这就是发生此错误的原因。所以下次将“数字”设置为某个东西,或者在尝试执行类似计算或设置变量的操作时添加“或___”。