Làm thế nào để đổ một bảng vào bảng điều khiển?


109

Tôi gặp sự cố khi hiển thị nội dung của bảng có chứa các bảng lồng nhau (n-deep). Tôi chỉ muốn đổ nó ra ngoài hoặc bảng điều khiển thông qua một printtuyên bố hoặc một cái gì đó nhanh chóng và bẩn thỉu nhưng tôi không thể tìm ra cách. Tôi đang tìm kiếm tương đương thô mà tôi sẽ nhận được khi in NSDictionarybằng gdb.

Câu trả lời:


56

Vui lòng duyệt qua Lua Wiki trên bảng tuần tự . Nó liệt kê một số cách về cách kết xuất một bảng vào bảng điều khiển.

Bạn chỉ cần chọn cái nào phù hợp với bạn nhất. Có nhiều cách để làm điều đó, nhưng tôi thường kết thúc bằng cách sử dụng từ Penlight :

> t = { a = { b = { c = "Hello world!", 1 }, 2, d = { 3 } } }
> require 'pl.pretty'.dump(t)
{
  a = {
    d = {
      3
    },
    b = {
      c = "Hello world!",
      1
    },
    2
  }
}

6
Câu hỏi ngu ngốc và thậm chí nhiều người mới hơn: làm cách nào để cài đặt một tiện ích mở rộng như pl.pretty? Thật tuyệt nếu tôi có thể làm điều gì đó giống như cài đặt đá quý mà không cần phải làm gì với việc mở các quả bóng nhựa và tìm vị trí lý tưởng trên HD của mình để xác định mọi thứ. Có "làm-nó-theo-cách này" nhanh chóng / không đau không?
Vách đá

1
Dah, lẽ ra tôi nên xem trang chủ trước khi đăng bình luận cuối cùng đó! Cài đặt không nhanh / không đau như tôi mong đợi nhưng cũng không quá tệ.
Cliff

penlight chiếu ánh sáng vào những gì tôi đang tìm kiếm!
Vách đá

7
@Cliff luarocks để cài đặt penlight
vagabond

101

Tôi biết câu hỏi này đã được đánh dấu là đã trả lời, nhưng hãy để tôi cắm thư viện của riêng tôi ở đây. Nó được gọi là checks.lua và bạn có thể tìm thấy nó ở đây:

https://github.com/kikito/inspect.lua

Nó chỉ là một tệp duy nhất mà bạn có thể yêu cầu từ bất kỳ tệp nào khác. Nó trả về một hàm chuyển bất kỳ giá trị Lua nào thành một chuỗi mà con người có thể đọc được:

local inspect = require('inspect')

print(inspect({1,2,3})) -- {1, 2, 3}
print(inspect({a=1,b=2})
-- {
--   a = 1
--   b = 2
-- }

Nó thụt lề các bảng phụ một cách chính xác và xử lý "bảng đệ quy" (bảng chứa các tham chiếu đến chính chúng) một cách chính xác, vì vậy nó không đi vào vòng lặp vô hạn. Nó sắp xếp các giá trị một cách hợp lý. Nó cũng in thông tin dễ hiểu.

Trân trọng!


Có lẽ bạn nên thêm thư viện của mình vào Lua Wiki . Tôi thấy thư viện của bạn cũng in các bảng đo lường, mà các thư viện khác không in.
Michal Kottman

Vấn đề là checks.lua không thực sự phù hợp với thể loại "tuần tự hóa". Văn bản nó trả về không phải là mã Lua hợp lệ; nó phải được sử dụng để gỡ lỗi / con người đọc. Tôi cho rằng tôi có thể thêm một liên kết nhỏ vào cuối hoặc một cái gì đó.
kikito

1
Đã thêm verify.lua vào wiki.
kikito

Vui lòng đặt cái này trên luarocks
Hack-R

3
@ Hack-R nó có trên luarocks:luarocks install inspect
kikito

86

Tôi thấy điều này hữu ích. Vì nếu đệ quy nó có thể in ra các bảng lồng nhau. Nó không cung cấp định dạng đẹp nhất trong đầu ra nhưng đối với một chức năng đơn giản như vậy, rất khó để đánh bại để gỡ lỗi.

function dump(o)
   if type(o) == 'table' then
      local s = '{ '
      for k,v in pairs(o) do
         if type(k) ~= 'number' then k = '"'..k..'"' end
         s = s .. '['..k..'] = ' .. dump(v) .. ','
      end
      return s .. '} '
   else
      return tostring(o)
   end
end

ví dụ

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("People:", dump(people))

Tạo ra kết quả sau:

Con người: {[1] = {["address"] = 16 Long Street, ["phone"] = 123456, ["name"] = Fred,}, [2] = {["address"] = 16 Long Street , ["phone"] = 123456, ["name"] = Wilma,}, [3] = {["address"] = 17 Long Street, ["phone"] = 123457, ["name"] = Barney, },}


1
Rất tốt cho việc chia sẻ thứ gì đó không cần thư viện bên ngoài.
Julian Knight

Trên bảng thực sự lớn, hàm của bạn ném lỗi stackoverflow
Herrgott

20

tìm thấy cái này:

-- Print contents of `tbl`, with indentation.
-- `indent` sets the initial level of indentation.
function tprint (tbl, indent)
  if not indent then indent = 0 end
  for k, v in pairs(tbl) do
    formatting = string.rep("  ", indent) .. k .. ": "
    if type(v) == "table" then
      print(formatting)
      tprint(v, indent+1)
    elseif type(v) == 'boolean' then
      print(formatting .. tostring(v))      
    else
      print(formatting .. v)
    end
  end
end

từ đây https://gist.github.com/ripter/4270799

hoạt động khá tốt cho tôi ...


19

Hầu hết các chức năng bảng in lua thuần túy mà tôi đã thấy đều gặp sự cố với đệ quy sâu và có xu hướng gây tràn ngăn xếp khi đi quá sâu. Chức năng bảng in mà tôi đã viết không có vấn đề này. Nó cũng phải có khả năng xử lý các bảng thực sự lớn do cách nó xử lý nối. Trong cách sử dụng cá nhân của tôi về chức năng này, nó đã xuất ra 63k dòng để tập tin trong khoảng một giây.

Đầu ra cũng giữ cú pháp lua và tập lệnh có thể dễ dàng được sửa đổi để lưu trữ liên tục đơn giản bằng cách ghi đầu ra vào tệp nếu được sửa đổi để chỉ cho phép các kiểu dữ liệu số, boolean, chuỗi và bảng được định dạng.

function print_table(node)
    local cache, stack, output = {},{},{}
    local depth = 1
    local output_str = "{\n"

    while true do
        local size = 0
        for k,v in pairs(node) do
            size = size + 1
        end

        local cur_index = 1
        for k,v in pairs(node) do
            if (cache[node] == nil) or (cur_index >= cache[node]) then

                if (string.find(output_str,"}",output_str:len())) then
                    output_str = output_str .. ",\n"
                elseif not (string.find(output_str,"\n",output_str:len())) then
                    output_str = output_str .. "\n"
                end

                -- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
                table.insert(output,output_str)
                output_str = ""

                local key
                if (type(k) == "number" or type(k) == "boolean") then
                    key = "["..tostring(k).."]"
                else
                    key = "['"..tostring(k).."']"
                end

                if (type(v) == "number" or type(v) == "boolean") then
                    output_str = output_str .. string.rep('\t',depth) .. key .. " = "..tostring(v)
                elseif (type(v) == "table") then
                    output_str = output_str .. string.rep('\t',depth) .. key .. " = {\n"
                    table.insert(stack,node)
                    table.insert(stack,v)
                    cache[node] = cur_index+1
                    break
                else
                    output_str = output_str .. string.rep('\t',depth) .. key .. " = '"..tostring(v).."'"
                end

                if (cur_index == size) then
                    output_str = output_str .. "\n" .. string.rep('\t',depth-1) .. "}"
                else
                    output_str = output_str .. ","
                end
            else
                -- close the table
                if (cur_index == size) then
                    output_str = output_str .. "\n" .. string.rep('\t',depth-1) .. "}"
                end
            end

            cur_index = cur_index + 1
        end

        if (size == 0) then
            output_str = output_str .. "\n" .. string.rep('\t',depth-1) .. "}"
        end

        if (#stack > 0) then
            node = stack[#stack]
            stack[#stack] = nil
            depth = cache[node] == nil and depth + 1 or depth - 1
        else
            break
        end
    end

    -- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
    table.insert(output,output_str)
    output_str = table.concat(output)

    print(output_str)
end

Đây là một ví dụ:

local t = {
    ["abe"] = {1,2,3,4,5},
    "string1",
    50,
    ["depth1"] = { ["depth2"] = { ["depth3"] = { ["depth4"] = { ["depth5"] = { ["depth6"] = { ["depth7"]= { ["depth8"] = { ["depth9"] = { ["depth10"] = {1000}, 900}, 800},700},600},500}, 400 }, 300}, 200}, 100},
    ["ted"] = {true,false,"some text"},
    "string2",
    [function() return end] = function() return end,
    75
}

print_table(t)

Đầu ra:

{
    [1] = 'string1',
    [2] = 50,
    [3] = 'string2',
    [4] = 75,
    ['abe'] = {
        [1] = 1,
        [2] = 2,
        [3] = 3,
        [4] = 4,
        [5] = 5
    },
    ['function: 06472B70'] = 'function: 06472A98',
    ['depth1'] = {
        [1] = 100,
        ['depth2'] = {
            [1] = 200,
            ['depth3'] = {
                [1] = 300,
                ['depth4'] = {
                    [1] = 400,
                    ['depth5'] = {
                        [1] = 500,
                        ['depth6'] = {
                            [1] = 600,
                            ['depth7'] = {
                                [1] = 700,
                                ['depth8'] = {
                                    [1] = 800,
                                    ['depth9'] = {
                                        [1] = 900,
                                        ['depth10'] = {
                                            [1] = 1000
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    ['ted'] = {
        [1] = true,
        [2] = false,
        [3] = 'some text'
    }
}

tabchức năng quá phức tạp. Về cơ bản nó chỉ là string.repeat('\t', amt)nhưng hiệu suất kém hơn nhiều.
val nói Phục hồi Monica

6

Như đã đề cập trước đó, bạn phải viết nó. Đây là phiên bản khiêm tốn của tôi: (phiên bản siêu cơ bản)

function tprint (t, s)
    for k, v in pairs(t) do
        local kfmt = '["' .. tostring(k) ..'"]'
        if type(k) ~= 'string' then
            kfmt = '[' .. k .. ']'
        end
        local vfmt = '"'.. tostring(v) ..'"'
        if type(v) == 'table' then
            tprint(v, (s or '')..kfmt)
        else
            if type(v) ~= 'string' then
                vfmt = tostring(v)
            end
            print(type(t)..(s or '')..kfmt..' = '..vfmt)
        end
    end
end

thí dụ:

local mytbl = { ['1']="a", 2, 3, b="c", t={d=1} }
tprint(mytbl)

đầu ra (Lua 5.0):

table[1] = 2
table[2] = 3
table["1"] = "a"
table["t"]["d"] = 1
table["b"] = "c"

1
Rất nguyên bản! Tôi thích nó.
Jack Giffin


2

Đây là phiên bản của tôi hỗ trợ loại trừ bảng và dữ liệu người dùng

-- Lua Table View by Elertan
table.print = function(t, exclusions)
    local nests = 0
    if not exclusions then exclusions = {} end
    local recurse = function(t, recurse, exclusions)
        indent = function()
            for i = 1, nests do
                io.write("    ")
            end
        end
        local excluded = function(key)
            for k,v in pairs(exclusions) do
                if v == key then
                    return true
                end
            end
            return false
        end
        local isFirst = true
        for k,v in pairs(t) do
            if isFirst then
                indent()
                print("|")
                isFirst = false
            end
            if type(v) == "table" and not excluded(k) then
                indent()
                print("|-> "..k..": "..type(v))
                nests = nests + 1
                recurse(v, recurse, exclusions)
            elseif excluded(k) then
                indent()
                print("|-> "..k..": "..type(v))
            elseif type(v) == "userdata" or type(v) == "function" then
                indent()
                print("|-> "..k..": "..type(v))
            elseif type(v) == "string" then
                indent()
                print("|-> "..k..": ".."\""..v.."\"")
            else
                indent()
                print("|-> "..k..": "..v)
            end
        end
        nests = nests - 1
    end

    nests = 0
    print("### START TABLE ###")
    for k,v in pairs(t) do
        print("root")
        if type(v) == "table" then
            print("|-> "..k..": "..type(v))
            nests = nests + 1
            recurse(v, recurse, exclusions)
        elseif type(v) == "userdata" or type(v) == "function" then
            print("|-> "..k..": "..type(v))
        elseif type(v) == "string" then
            print("|-> "..k..": ".."\""..v.."\"")
        else
            print("|-> "..k..": "..v)
        end
    end
    print("### END TABLE ###")
end

Đây là một ví dụ

t = {
    location = {
       x = 10,
       y = 20
    },
    size = {
      width = 100000000,
      height = 1000,
    },
    name = "Sidney",
    test = {
        hi = "lol",
    },
    anotherone = {
        1, 
        2, 
        3
    }
}

table.print(t, { "test" })

Bản in:

   ### START TABLE ###
root
|-> size: table
    |
    |-> height: 1000
    |-> width: 100000000
root
|-> location: table
    |
    |-> y: 20
    |-> x: 10
root
|-> anotherone: table
    |
    |-> 1: 1
    |-> 2: 2
    |-> 3: 3
root
|-> test: table
    |
    |-> hi: "lol"
root
|-> name: "Sidney"
### END TABLE ###

Lưu ý rằng root không loại bỏ các loại trừ


2

Định dạng dưới dạng JSON (bạn có thể "làm đẹp" trong IDE sau này):

local function format_any_value(obj, buffer)
    local _type = type(obj)
    if _type == "table" then
        buffer[#buffer + 1] = '{"'
        for key, value in next, obj, nil do
            buffer[#buffer + 1] = tostring(key) .. '":'
            format_any_value(value, buffer)
            buffer[#buffer + 1] = ',"'
        end
        buffer[#buffer] = '}' -- note the overwrite
    elseif _type == "string" then
        buffer[#buffer + 1] = '"' .. obj .. '"'
    elseif _type == "boolean" or _type == "number" then
        buffer[#buffer + 1] = tostring(obj)
    else
        buffer[#buffer + 1] = '"???' .. _type .. '???"'
    end
end

Sử dụng:

local function format_as_json(obj)
    if obj == nil then return "null" else
        local buffer = {}
        format_any_value(obj, buffer)
        return table.concat(buffer)
    end
end

local function print_as_json(obj)
    print(_format_as_json(obj))
end

print_as_json {1, 2, 3}
print_as_json(nil)
print_as_json("string")
print_as_json {[1] = 1, [2] = 2, three = { { true } }, four = "four"}

BTW, tôi cũng đã viết một số giải pháp khác: một giải pháp rất nhanh và một giải pháp có ký tự đặc biệt thoát: https://github.com/vn971/fast_json_encode


Đây thực sự là những gì tôi đang tìm kiếm mặc dù nó không cụ thể là những gì op đang yêu cầu. Cảm ơn vì giải pháp đơn giản như vậy. Giúp việc sử dụng dễ dàng hơn trong các môi trường Lua hạn chế về không gian như NodeMCU.
Sawtaytoes

1

Tôi e rằng bạn phải tự viết mã nó. Tôi đã viết cái này, và nó có thể hữu ích cho bạn

function printtable(table, indent)

  indent = indent or 0;

  local keys = {};

  for k in pairs(table) do
    keys[#keys+1] = k;
    table.sort(keys, function(a, b)
      local ta, tb = type(a), type(b);
      if (ta ~= tb) then
        return ta < tb;
      else
        return a < b;
      end
    end);
  end

  print(string.rep('  ', indent)..'{');
  indent = indent + 1;
  for k, v in pairs(table) do

    local key = k;
    if (type(key) == 'string') then
      if not (string.match(key, '^[A-Za-z_][0-9A-Za-z_]*$')) then
        key = "['"..key.."']";
      end
    elseif (type(key) == 'number') then
      key = "["..key.."]";
    end

    if (type(v) == 'table') then
      if (next(v)) then
        printf("%s%s =", string.rep('  ', indent), tostring(key));
        printtable(v, indent);
      else
        printf("%s%s = {},", string.rep('  ', indent), tostring(key));
      end 
    elseif (type(v) == 'string') then
      printf("%s%s = %s,", string.rep('  ', indent), tostring(key), "'"..v.."'");
    else
      printf("%s%s = %s,", string.rep('  ', indent), tostring(key), tostring(v));
    end
  end
  indent = indent - 1;
  print(string.rep('  ', indent)..'}');
end

1
Cảm ơn vì đã trả lời. Tôi cố gắng này và tôi nhận được: nỗ lực để gọi 'sắp xếp' (một giá trị nil) toàn cầu
Cliff

Thay đổi sortthành table.sort... Chắc hẳn đã có một local sort = table.sortnơi nào đó trong mã nơi nó được lấy từ đó.
Michal Kottman

Bạn phải có một chút tưởng tượng! Có một số ký hiệu được sao chép từ vùng bảng thư viện sang _G để thuận tiện. sortlà một bản sao của table.sort, strrepstring.rep, strmatchstring.match, vv Hãy cho tôi biết nếu có bất kỳ hơn và tôi sẽ thay đổi câu trả lời của tôi.
Borodin

Tôi xin lỗi, tôi cũng có một mạng lưới khá sâu của các bảng do nỗ lực của riêng tôi để lặp lại cấu trúc gặp phải sự cố tràn ngăn xếp. (Không có ý định chơi chữ!) Tôi đã đập đầu cố gắng rút lại đệ quy của mình và sử dụng các lệnh gọi đuôi thích hợp nhưng tôi đã thất vọng ở điểm tôi đã đăng ở đây.
Vách đá

Nói chung, bạn không thể xóa đệ quy khỏi một hàm như vậy, vì nó không phải là đệ quy cuối. Sử dụng Lua được xây dựng với ngăn xếp lớn hơn hoặc triển khai cùng một thuật toán bằng cách sử dụng bảng Lua để lưu trữ ngăn xếp đệ quy.
Borodin

1
--~ print a table
function printTable(list, i)

    local listString = ''
--~ begin of the list so write the {
    if not i then
        listString = listString .. '{'
    end

    i = i or 1
    local element = list[i]

--~ it may be the end of the list
    if not element then
        return listString .. '}'
    end
--~ if the element is a list too call it recursively
    if(type(element) == 'table') then
        listString = listString .. printTable(element)
    else
        listString = listString .. element
    end

    return listString .. ', ' .. printTable(list, i + 1)

end


local table = {1, 2, 3, 4, 5, {'a', 'b'}, {'G', 'F'}}
print(printTable(table))

Xin chào, tôi đã viết một đoạn mã để thực hiện việc này bằng Lua thuần túy, nó có một lỗi (viết hôn mê sau phần tử cuối cùng của danh sách) nhưng tôi đã viết nó nhanh như thế nào dưới dạng nguyên mẫu, tôi sẽ để cho bạn điều chỉnh nó cho phù hợp với bạn. nhu cầu.


1

Đang thêm phiên bản khác. Cái này cũng cố gắng lặp lại dữ liệu người dùng.

function inspect(o,indent)
    if indent == nil then indent = 0 end
    local indent_str = string.rep("    ", indent)
    local output_it = function(str)
        print(indent_str..str)
    end

    local length = 0

    local fu = function(k, v)
        length = length + 1
        if type(v) == "userdata" or type(v) == 'table' then
            output_it(indent_str.."["..k.."]")
            inspect(v, indent+1)
        else
            output_it(indent_str.."["..k.."] "..tostring(v))
        end
    end

    local loop_pairs = function()
        for k,v in pairs(o) do fu(k,v) end
    end

    local loop_metatable_pairs = function()
        for k,v in pairs(getmetatable(o)) do fu(k,v) end
    end

    if not pcall(loop_pairs) and not pcall(loop_metatable_pairs) then
        output_it(indent_str.."[[??]]")
    else
        if length == 0 then
            output_it(indent_str.."{}")
        end
    end
end

1

Tôi sử dụng chức năng của riêng mình để in nội dung của bảng nhưng không chắc nó dịch tốt như thế nào với môi trường của bạn:

---A helper function to print a table's contents.
---@param tbl table @The table to print.
---@param depth number @The depth of sub-tables to traverse through and print.
---@param n number @Do NOT manually set this. This controls formatting through recursion.
function PrintTable(tbl, depth, n)
  n = n or 0;
  depth = depth or 5;

  if (depth == 0) then
      print(string.rep(' ', n).."...");
      return;
  end

  if (n == 0) then
      print(" ");
  end

  for key, value in pairs(tbl) do
      if (key and type(key) == "number" or type(key) == "string") then
          key = string.format("[\"%s\"]", key);

          if (type(value) == "table") then
              if (next(value)) then
                  print(string.rep(' ', n)..key.." = {");
                  PrintTable(value, depth - 1, n + 4);
                  print(string.rep(' ', n).."},");
              else
                  print(string.rep(' ', n)..key.." = {},");
              end
          else
              if (type(value) == "string") then
                  value = string.format("\"%s\"", value);
              else
                  value = tostring(value);
              end

              print(string.rep(' ', n)..key.." = "..value..",");
          end
      end
  end

  if (n == 0) then
      print(" ");
  end
end

-1

Tôi đã sửa đổi một cách khiêm tốn một chút mã Alundaio:

-- by Alundaio
-- KK modified 11/28/2019

function dump_table_to_string(node, tree, indentation)
    local cache, stack, output = {},{},{}
    local depth = 1


    if type(node) ~= "table" then
        return "only table type is supported, got " .. type(node)
    end

    if nil == indentation then indentation = 1 end

    local NEW_LINE = "\n"
    local TAB_CHAR = " "

    if nil == tree then
        NEW_LINE = "\n"
    elseif not tree then
        NEW_LINE = ""
        TAB_CHAR = ""
    end

    local output_str = "{" .. NEW_LINE

    while true do
        local size = 0
        for k,v in pairs(node) do
            size = size + 1
        end

        local cur_index = 1
        for k,v in pairs(node) do
            if (cache[node] == nil) or (cur_index >= cache[node]) then

                if (string.find(output_str,"}",output_str:len())) then
                    output_str = output_str .. "," .. NEW_LINE
                elseif not (string.find(output_str,NEW_LINE,output_str:len())) then
                    output_str = output_str .. NEW_LINE
                end

                -- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
                table.insert(output,output_str)
                output_str = ""

                local key
                if (type(k) == "number" or type(k) == "boolean") then
                    key = "["..tostring(k).."]"
                else
                    key = "['"..tostring(k).."']"
                end

                if (type(v) == "number" or type(v) == "boolean") then
                    output_str = output_str .. string.rep(TAB_CHAR,depth*indentation) .. key .. " = "..tostring(v)
                elseif (type(v) == "table") then
                    output_str = output_str .. string.rep(TAB_CHAR,depth*indentation) .. key .. " = {" .. NEW_LINE
                    table.insert(stack,node)
                    table.insert(stack,v)
                    cache[node] = cur_index+1
                    break
                else
                    output_str = output_str .. string.rep(TAB_CHAR,depth*indentation) .. key .. " = '"..tostring(v).."'"
                end

                if (cur_index == size) then
                    output_str = output_str .. NEW_LINE .. string.rep(TAB_CHAR,(depth-1)*indentation) .. "}"
                else
                    output_str = output_str .. ","
                end
            else
                -- close the table
                if (cur_index == size) then
                    output_str = output_str .. NEW_LINE .. string.rep(TAB_CHAR,(depth-1)*indentation) .. "}"
                end
            end

            cur_index = cur_index + 1
        end

        if (size == 0) then
            output_str = output_str .. NEW_LINE .. string.rep(TAB_CHAR,(depth-1)*indentation) .. "}"
        end

        if (#stack > 0) then
            node = stack[#stack]
            stack[#stack] = nil
            depth = cache[node] == nil and depth + 1 or depth - 1
        else
            break
        end
    end

    -- This is necessary for working with HUGE tables otherwise we run out of memory using concat on huge strings
    table.insert(output,output_str)
    output_str = table.concat(output)

    return output_str

end

sau đó:

print(dump_table_to_string("AA", true,3))

print(dump_table_to_string({"AA","BB"}, true,3))

print(dump_table_to_string({"AA","BB"}))

print(dump_table_to_string({"AA","BB"},false))

print(dump_table_to_string({"AA","BB",{22,33}},true,2))

cho:

only table type is supported, got string

{
   [1] = 'AA',
   [2] = 'BB'
}

{
 [1] = 'AA',
 [2] = 'BB'
}

{[1] = 'AA',[2] = 'BB'}

{
  [1] = 'AA',
  [2] = 'BB',
  [3] = {
    [1] = 22,
    [2] = 33
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.