lua哈希表,表索引是零?

时间:2012-04-02 00:03:40

标签: lua hashtable null lua-table

我目前要做的是制作一个包含person_records(作为值)的电子邮件地址表(作为键)。 person_record中包含6个左右的东西。我得到的问题是,当我尝试将电子邮件地址指定为表格的关键时,它会抱怨并表示表索引为零...这是我到目前为止所做的:

random_record = split(line, ",")
person_record = {first_name = random_record[1], last_name = random_record[2], email_address = random_record[3], street_address = random_record[4], city = random_record[5], state = random_record[6]}
email_table[person_record.email_address] = person_record

我编写了自己的split函数,它基本上需要一行输入并提取6个逗号分隔值并将它们存储在一个表中(random_record)

当我尝试说email_table [person_record.email_address] = person_record时出错。 但是当我打印出person_record.email_address时它不是nil,它打印出我存储在其中的字符串..我很困惑。

function split(str, pat)
   local t = {}  -- NOTE: use {n = 0} in Lua-5.0
   local fpat = "(.-)" .. pat
   local last_end = 1
   local s, e, cap = str:find(fpat, 1)
   while s do
      if s ~= 1 or cap ~= "" then
     table.insert(t,cap)
      end
      last_end = e+1
      s, e, cap = str:find(fpat, last_end)
   end
   if last_end <= #str then
      cap = str:sub(last_end)
      table.insert(t, cap)
   end
   return t
end

2 个答案:

答案 0 :(得分:2)

从您的示例中复制并粘贴以下代码并运行正常:

email_table = {}
random_record = {"first", "second", "third"}
person_record = {first_name = random_record[1], last_name = random_record[1], email_address = random_record[1]}
email_table[person_record.email_address] = person_record

所以你的问题出在split函数中。

BTW,Lua没有“哈希表”。它只有“表”存储键/值对。这些是否碰巧使用哈希是一个实现细节。

答案 1 :(得分:0)

看起来你在迭代一些以逗号分隔数据的行。 查看您的拆分功能,只要找不到特定行中的分隔符(,)符号,它就会停止。因此,只需少于3个分隔字段(对于非常常见的例子:文件末尾的空行),它将产生一个不会达到[3]的表格。寻址任何空表值将返回nil,因此person_record.email_address也将在代码的第二行设置为nil。然后,当您尝试将存储在person_record.email_address中的nil用作第3行中email_table的索引时,您将收到您提到的确切错误。