Пытаясь напечатать таблицу в Луа - PullRequest
2 голосов
/ 12 апреля 2019

Я пытаюсь напечатать следующее как вывод в 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

и вывод таблицы: 0x55c9fb81e190

В идеале я хотел бы напечатать x как список

Это моя вторая программа lua после Hello World. Очень плохо знаком с Linux и программированием.

Буду очень признателен за вашу помощь!

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Например:

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

Если вам нужно обработать вложенные таблицы, используйте:

if type(value) == "table" then
    -- Do something
end

Я оставлю это в качестве упражнения, чтобы взять вышеупомянутые элементы и сделатьодна рекурсивная функция для вывода вложенных таблиц.

0 голосов
/ 12 апреля 2019

Хорошо, во-первых, спасибо всем за публикацию ваших предложений и ответов.

По сути, кажется, что для распечатки списка в Lua много работы.Проще это сделать Python или MATLAB.Полагаю, если вы можете легко написать список в Lua-скрипте, нет смысла пытаться снова напечатать его в качестве вывода.Но я полагаю, что у таких начинающих, как я, наверняка возникнут вопросы об этих тезисах.

Я вижу примеры легкого создания моделей в Lua и их визуализации в Meshup, например, при построении моделей твердого тела.

Спасибо всем! :) 1007 *

0 голосов
/ 12 апреля 2019

Вам нужно обнаружить таблицу и рекурсивно построить дамп таблицы.Попробуйте это:

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) )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...