尝试在lua中打印表格

4

我在尝试将以下内容作为输出打印到lua中。

inertia_x = {
{46.774, 0., 0.},
{0., 8.597, 0.},
{0., 0., 50.082}
}

x = {mass = 933.0, com = {0.0, 143.52, 0.0}, inertia_x}

print(x)

这段代码是在文本编辑器中编写的,并命名为sample.lua

现在我正在使用Linux,进入存储.lua文件的正确目录并调用

$ lua sample.lua

输出是table: 0x55c9fb81e190

我希望像列表一样将x打印出来

这是我的第二个lua程序,Hello World之后。对Linux和编程都很陌生。

非常感谢您的帮助!


2
可能是如何将表转储到控制台?的重复问题。 - Piglet
print(x) 只会打印出表 x 的唯一十六进制 ID。如果你想要列出表的内容,你需要提供一些代码告诉 Lua 如何遍历表以及如何打印它的内容。另外,我想补充一点:在继续之前,先了解 Lua 的控制结构,例如循环、条件语句等。 - Piglet
2个回答

4

例如:

for key, value in pairs(yourTable) do
    print(key, value)
end

如果您需要处理嵌套的表格,则使用以下内容:
if type(value) == "table" then
    -- Do something
end

我会留下这个练习,让您将上述元素合并成一个递归函数来转储嵌套表格。

1
你需要检测表格并递归构建表格转储。尝试这个:
local inertia_x = {
{46.774, 0., 0.},
{0., 8.597, 0.},
{0., 0., 50.082}
}

local x = {mass = 933.0, com = {0.0, 143.52, 0.0}, inertia_x}

local function dump (  value , call_indent)

  if not call_indent then 
    call_indent = ""
  end

  local indent = call_indent .. "  "

  local output = ""

  if type(value) == "table" then
      output = output .. "{"
      local first = true
      for inner_key, inner_value in pairs ( value ) do
        if not first then 
          output = output .. ", "
        else
          first = false
        end
        output = output .. "\n" .. indent
        output = output  .. inner_key .. " = " .. dump ( inner_value, indent ) 
      end
      output = output ..  "\n" .. call_indent .. "}"

  elseif type (value) == "userdata" then
    output = "userdata"
  else 
    output =  value
  end
  return output 
end

print ( "x = " .. dump(x) )


1
当存在环路时,它就会崩溃。 - Deduplicator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接