我正在尝试做的是使用Lua中的以下代码显示表的内容.
local people = {
   {
   name = "Fred",
   address = "16 Long Street",
   phone = "123456"
   },
   {
   name = "Wilma",
   address = "16 Long Street",
   phone = "123456"
   },
   {
   name = "Barney",
   address = "17 Long Street",
   phone = "123457"
   }
}
for k, v in pairs(people ) do
    print(k, v)
end
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
1   table: 0x9a2d8b0
2   table: 0x9a2d110
3   table: 0x9a2cb28
Run Code Online (Sandbox Code Playgroud)
    Oka*_*Oka 12
要显示嵌套表,您必须使用嵌套循环.
此外,用于ipairs迭代类似数组的表,并pairs迭代通过类似记录的表.
local people = {
   {
       name = "Fred",
       address = "16 Long Street",
       phone = "123456"
   },
   {
       name = "Wilma",
       address = "16 Long Street",
       phone = "123456"
   },
   {
       name = "Barney",
       address = "17 Long Street",
       phone = "123457"
   }
}
for index, data in ipairs(people) do
    print(index)
    for key, value in pairs(data) do
        print('\t', key, value)
    end
end
Run Code Online (Sandbox Code Playgroud)
输出:
1   
        phone   123456          
        name    Fred            
        address 16 Long Street          
2   
        phone   123456          
        name    Wilma           
        address 16 Long Street          
3   
        phone   123457          
        name    Barney          
        address 17 Long Street  
Run Code Online (Sandbox Code Playgroud)
        这递归地序列化了一个表.此代码的变体可用于从表生成JSON.
function tprint (tbl, indent)
  if not indent then indent = 0 end
  local toprint = string.rep(" ", indent) .. "{\r\n"
  indent = indent + 2 
  for k, v in pairs(tbl) do
    toprint = toprint .. string.rep(" ", indent)
    if (type(k) == "number") then
      toprint = toprint .. "[" .. k .. "] = "
    elseif (type(k) == "string") then
      toprint = toprint  .. k ..  "= "   
    end
    if (type(v) == "number") then
      toprint = toprint .. v .. ",\r\n"
    elseif (type(v) == "string") then
      toprint = toprint .. "\"" .. v .. "\",\r\n"
    elseif (type(v) == "table") then
      toprint = toprint .. tprint(v, indent + 2) .. ",\r\n"
    else
      toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n"
    end
  end
  toprint = toprint .. string.rep(" ", indent-2) .. "}"
  return toprint
end
Run Code Online (Sandbox Code Playgroud)
通过这个运行你的表:
 local people = {
   {
   name = "Fred",
   address = "16 Long Street",
   phone = "123456"
   },
   {
   name = "Wilma",
   address = "16 Long Street",
   phone = "123456"
   },
   {
   name = "Barney",
   address = "17 Long Street",
   phone = "123457"
   }
}
print (tprint(people))
Run Code Online (Sandbox Code Playgroud)
生成这个:
  {
  [1] =     {
      name= "Fred",
      phone= "123456",
      address= "16 Long Street",
    },
  [2] =     {
      name= "Wilma",
      phone= "123456",
      address= "16 Long Street",
    },
  [3] =     {
      name= "Barney",
      phone= "123457",
      address= "17 Long Street",
    },
}
Run Code Online (Sandbox Code Playgroud)
        如果您的数据记录中有静态预定义字段名称,这个更简单的版本可能适合您:
for i,t in ipairs(people) do
  print('Record',i)
  print('Name',t.name)
  print('Address',t.address)
  print('Phone',t.phone)
  print()
end
Run Code Online (Sandbox Code Playgroud)
        如果您需要在Neovim代码中转储表内容,可以使用此方法,该方法内置于标准库中。
print( vim.inspect(table) )
Run Code Online (Sandbox Code Playgroud)
来自 Neovim 文档:
Lua标准模块
lua-stdlib
Nvim Lua“标准库”(stdlib)是vim模块,它公开了各种函数和子模块。它总是被加载的,因此 require("vim") 是不必要的。您可以查看模块属性:
:lua print(vim.inspect(vim))
结果如下:
{
  _os_proc_children = <function 1>,
  _os_proc_info = <function 2>,
  ...
  api = {
    nvim__id = <function 5>,
    nvim__id_array = <function 6>,
    ...
  },
  deepcopy = <function 106>,
  gsplit = <function 107>,
  ...
}
Run Code Online (Sandbox Code Playgroud)