table.unpack()

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

table.unpack()

Ulisses Piassa
Bom dia galera!

Estou querendo imprimir no trace a estrutura de uma tabela que está carregada em memória RAM. Esotu tentando fazer da seguinte forma:

local tabela -- variável que é carregada dinamicamente por outro módulo do sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo eles números ou outras tabelas.

print (table.unpack(tabela)) -- tentativa de imprimir o conteú

No entanto, essa lógica não está retornando nada, mesmo que a tabela esteja populada.

Tentie fazer um outro teste para verificar o uso do table.unpack() da seguinte forma:

funcaoteste = function()

local tabela = {
a = {
b = 0x01
},

c = 0x02,

d = {
e = {
f = 0x03
},
g = 0x04
}
}

print(table.unpack(tabela))

for i,v in pairs(tabela) do
print (i,v)
end
end

return funcaoteste()

Neste caso, pairs() retorna os valores dos índices de tabela, mas table.unpack() continua não retornando nada.

Sei uqe devo estar cometendo algum erro básico nisso tudo e talvez esteja utilizando o table.unpack de forma incorreta. Encontrei algumas explicações em alguns fóruns, mas nenhuma conseguiu sanar minha dúvida.

Alguém poderia me ajudar a descobrir o que não está certo?

Valeu pessoal!!

[]'s


Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: table.unpack()

Denis Dos Santos Silva
qual versao do Lua voce esta usando ?

na versao 5.1.5
$ lua -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio

$ lua lua-test.lua

a       table: 0x600051220
d       table: 0x600051340
c       2



Em segunda-feira, 7 de março de 2016 10:48:31 UTC-3, Ulisses Piassa escreveu:
Bom dia galera!

Estou querendo imprimir no trace a estrutura de uma tabela que está carregada em memória RAM. Esotu tentando fazer da seguinte forma:

local tabela -- variável que é carregada dinamicamente por outro módulo do sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo eles números ou outras tabelas.

print (table.unpack(tabela)) -- tentativa de imprimir o conteú

No entanto, essa lógica não está retornando nada, mesmo que a tabela esteja populada.

Tentie fazer um outro teste para verificar o uso do table.unpack() da seguinte forma:

funcaoteste = function()

local tabela = {
a = {
b = 0x01
},

c = 0x02,

d = {
e = {
f = 0x03
},
g = 0x04
}
}

print(table.unpack(tabela))

for i,v in pairs(tabela) do
print (i,v)
end
end

return funcaoteste()

Neste caso, pairs() retorna os valores dos índices de tabela, mas table.unpack() continua não retornando nada.

Sei uqe devo estar cometendo algum erro básico nisso tudo e talvez esteja utilizando o table.unpack de forma incorreta. Encontrei algumas explicações em alguns fóruns, mas nenhuma conseguiu sanar minha dúvida.

Alguém poderia me ajudar a descobrir o que não está certo?

Valeu pessoal!!

[]'s


Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: table.unpack()

Ulisses Piassa
Denis, estou usando a versão 5.2!

Estou tentando fazer esse teste em ambiente de produção!

Valeu!!

2016-03-07 12:27 GMT-03:00 Denis Dos Santos Silva <[hidden email]>:
qual versao do Lua voce esta usando ?

na versao 5.1.5
$ lua -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio

$ lua lua-test.lua

a       table: 0x600051220
d       table: 0x600051340
c       2



Em segunda-feira, 7 de março de 2016 10:48:31 UTC-3, Ulisses Piassa escreveu:
Bom dia galera!

Estou querendo imprimir no trace a estrutura de uma tabela que está carregada em memória RAM. Esotu tentando fazer da seguinte forma:

local tabela -- variável que é carregada dinamicamente por outro módulo do sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo eles números ou outras tabelas.

print (table.unpack(tabela)) -- tentativa de imprimir o conteú

No entanto, essa lógica não está retornando nada, mesmo que a tabela esteja populada.

Tentie fazer um outro teste para verificar o uso do table.unpack() da seguinte forma:

funcaoteste = function()

local tabela = {
a = {
b = 0x01
},

c = 0x02,

d = {
e = {
f = 0x03
},
g = 0x04
}
}

print(table.unpack(tabela))

for i,v in pairs(tabela) do
print (i,v)
end
end

return funcaoteste()

Neste caso, pairs() retorna os valores dos índices de tabela, mas table.unpack() continua não retornando nada.

Sei uqe devo estar cometendo algum erro básico nisso tudo e talvez esteja utilizando o table.unpack de forma incorreta. Encontrei algumas explicações em alguns fóruns, mas nenhuma conseguiu sanar minha dúvida.

Alguém poderia me ajudar a descobrir o que não está certo?

Valeu pessoal!!

[]'s


Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: table.unpack()

Roberto Ierusalimschy
In reply to this post by Ulisses Piassa
> Estou querendo imprimir no trace a estrutura de uma tabela que está
> carregada em memória RAM. Esotu tentando fazer da seguinte forma:
>
> local tabela *-- variável que é carregada dinamicamente por outro módulo do
> sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo
> eles números ou outras tabelas.*
>
> print (table.unpack(tabela)) -- tentativa de imprimir o conteú

Lembre-se que 'table.unpack', assim como todas as outras funções da
biblioteca 'table', operam sobre sequências. Isso é, elas só consideram
os índices inteiros 1..n da tabela:

  print(table.unpack{10, 20, 30, a = 40, b = 50})
     --> 10    20    30

Os índices com outras chaves (strings, etc.) são ignorados.

-- Roberto

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Visite este grupo em https://groups.google.com/group/lua-br.
Para obter mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: table.unpack()

Julio Felipe Angelini
In reply to this post by Ulisses Piassa
Então, tabelas em Lua têm duas partes: a parte array (ou vetor) que é indexada com números inteiros contíguos de de 1 pra cima, e a parte de dicionário (ou hashtable), que guarda todo o resto.

table.unpack() só "desempacota" a parte array da tabela, então ela não serve para você acessar todo o conteúdo dela.

Realmente, o jeito de fazer é usando pairs mesmo. Uma coisa mais ou menos assim:

local function table_to_string(the_table, indent)
    if not indent then
        indent = ""
    end

    local the_string = ""

    for k, v in pairs(the_table) do
        the_string = string.format("%s\n%s%s = ", the_string, indent, tostring(k))
        if type(v) == "table" then
            local v_string = table_to_string(v, indent .. "    ")
            the_string = string.format("%s{%s\n%s}", the_string, v_string, indent)
        else
            the_string = the_string .. tostring(v)
        end
    end

    return the_string
end


Daí você pode fazer print(table_to_string(tabela)) para exibir o conteúdo da tabela.

Detalhe que isso é só uma implementação bem quick and dirty. Esse código não printa os objetos guardados nas chaves da tabela, nem se protege contra loops infinitos caso a tabela tenha uma referência circular, mas o caminho é por aí.

-- Julio


On Monday, March 7, 2016 at 12:37:18 PM UTC-3, Ulisses Piassa wrote:
Denis, estou usando a versão 5.2!

Estou tentando fazer esse teste em ambiente de produção!

Valeu!!

2016-03-07 12:27 GMT-03:00 Denis Dos Santos Silva <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="tJ9adK6dAwAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">de...@...>:
qual versao do Lua voce esta usando ?

na versao 5.1.5
$ lua -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio

$ lua lua-test.lua

a       table: 0x600051220
d       table: 0x600051340
c       2



Em segunda-feira, 7 de março de 2016 10:48:31 UTC-3, Ulisses Piassa escreveu:
Bom dia galera!

Estou querendo imprimir no trace a estrutura de uma tabela que está carregada em memória RAM. Esotu tentando fazer da seguinte forma:

local tabela -- variável que é carregada dinamicamente por outro módulo do sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo eles números ou outras tabelas.

print (table.unpack(tabela)) -- tentativa de imprimir o conteú

No entanto, essa lógica não está retornando nada, mesmo que a tabela esteja populada.

Tentie fazer um outro teste para verificar o uso do table.unpack() da seguinte forma:

funcaoteste = function()

local tabela = {
a = {
b = 0x01
},

c = 0x02,

d = {
e = {
f = 0x03
},
g = 0x04
}
}

print(table.unpack(tabela))

for i,v in pairs(tabela) do
print (i,v)
end
end

return funcaoteste()

Neste caso, pairs() retorna os valores dos índices de tabela, mas table.unpack() continua não retornando nada.

Sei uqe devo estar cometendo algum erro básico nisso tudo e talvez esteja utilizando o table.unpack de forma incorreta. Encontrei algumas explicações em alguns fóruns, mas nenhuma conseguiu sanar minha dúvida.

Alguém poderia me ajudar a descobrir o que não está certo?

Valeu pessoal!!

[]'s


Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para <a href="javascript:" target="_blank" gdf-obfuscated-mailto="tJ9adK6dAwAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">lua-br+un...@googlegroups.com.
Acesse esse grupo em <a href="https://groups.google.com/group/lua-br" target="_blank" rel="nofollow" onmousedown="this.href=&#39;https://groups.google.com/group/lua-br&#39;;return true;" onclick="this.href=&#39;https://groups.google.com/group/lua-br&#39;;return true;">https://groups.google.com/group/lua-br.
Para mais opções, acesse <a href="https://groups.google.com/d/optout" target="_blank" rel="nofollow" onmousedown="this.href=&#39;https://groups.google.com/d/optout&#39;;return true;" onclick="this.href=&#39;https://groups.google.com/d/optout&#39;;return true;">https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: table.unpack()

Ulisses Piassa
Roberto, Julio e Denis,

Obrigado pelas respostas! Me ajudaram bastante!!

Consegui entender por que não estava funcionando - e por que não vai, caso eu continue utilizando a mesma lógica, kkk.

Vou usar a idéia do algoritmo para me basear e posto os resultados! :]

Valeu!!

[]'s


Ulisses

2016-03-07 15:13 GMT-03:00 Julio Felipe Angelini <[hidden email]>:
Então, tabelas em Lua têm duas partes: a parte array (ou vetor) que é indexada com números inteiros contíguos de de 1 pra cima, e a parte de dicionário (ou hashtable), que guarda todo o resto.

table.unpack() só "desempacota" a parte array da tabela, então ela não serve para você acessar todo o conteúdo dela.

Realmente, o jeito de fazer é usando pairs mesmo. Uma coisa mais ou menos assim:

local function table_to_string(the_table, indent)
    if not indent then
        indent = ""
    end

    local the_string = ""

    for k, v in pairs(the_table) do
        the_string = string.format("%s\n%s%s = ", the_string, indent, tostring(k))
        if type(v) == "table" then
            local v_string = table_to_string(v, indent .. "    ")
            the_string = string.format("%s{%s\n%s}", the_string, v_string, indent)
        else
            the_string = the_string .. tostring(v)
        end
    end

    return the_string
end


Daí você pode fazer print(table_to_string(tabela)) para exibir o conteúdo da tabela.

Detalhe que isso é só uma implementação bem quick and dirty. Esse código não printa os objetos guardados nas chaves da tabela, nem se protege contra loops infinitos caso a tabela tenha uma referência circular, mas o caminho é por aí.

-- Julio


On Monday, March 7, 2016 at 12:37:18 PM UTC-3, Ulisses Piassa wrote:
Denis, estou usando a versão 5.2!

Estou tentando fazer esse teste em ambiente de produção!

Valeu!!

2016-03-07 12:27 GMT-03:00 Denis Dos Santos Silva <[hidden email]>:
qual versao do Lua voce esta usando ?

na versao 5.1.5
$ lua -v
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio

$ lua lua-test.lua

a       table: 0x600051220
d       table: 0x600051340
c       2



Em segunda-feira, 7 de março de 2016 10:48:31 UTC-3, Ulisses Piassa escreveu:
Bom dia galera!

Estou querendo imprimir no trace a estrutura de uma tabela que está carregada em memória RAM. Esotu tentando fazer da seguinte forma:

local tabela -- variável que é carregada dinamicamente por outro módulo do sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo eles números ou outras tabelas.

print (table.unpack(tabela)) -- tentativa de imprimir o conteú

No entanto, essa lógica não está retornando nada, mesmo que a tabela esteja populada.

Tentie fazer um outro teste para verificar o uso do table.unpack() da seguinte forma:

funcaoteste = function()

local tabela = {
a = {
b = 0x01
},

c = 0x02,

d = {
e = {
f = 0x03
},
g = 0x04
}
}

print(table.unpack(tabela))

for i,v in pairs(tabela) do
print (i,v)
end
end

return funcaoteste()

Neste caso, pairs() retorna os valores dos índices de tabela, mas table.unpack() continua não retornando nada.

Sei uqe devo estar cometendo algum erro básico nisso tudo e talvez esteja utilizando o table.unpack de forma incorreta. Encontrei algumas explicações em alguns fóruns, mas nenhuma conseguiu sanar minha dúvida.

Alguém poderia me ajudar a descobrir o que não está certo?

Valeu pessoal!!

[]'s


Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: table.unpack()

Denis Dos Santos Silva
In reply to this post by Ulisses Piassa
blz.

bem, uma comentario oportuno seria voce adotar um framework de testes. ha varios.

eu gosto muito do padrao 'xUnit', mas, tem coisa bem mais moderna.

aumenta a qualidade do codigo e preserva o sono. =)



Em segunda-feira, 7 de março de 2016 10:48:31 UTC-3, Ulisses Piassa escreveu:
Bom dia galera!

Estou querendo imprimir no trace a estrutura de uma tabela que está carregada em memória RAM. Esotu tentando fazer da seguinte forma:

local tabela -- variável que é carregada dinamicamente por outro módulo do sistema recebendo uma tabela, que pode ter um ou diversos parâmetros, sendo eles números ou outras tabelas.

print (table.unpack(tabela)) -- tentativa de imprimir o conteú

No entanto, essa lógica não está retornando nada, mesmo que a tabela esteja populada.

Tentie fazer um outro teste para verificar o uso do table.unpack() da seguinte forma:

funcaoteste = function()

local tabela = {
a = {
b = 0x01
},

c = 0x02,

d = {
e = {
f = 0x03
},
g = 0x04
}
}

print(table.unpack(tabela))

for i,v in pairs(tabela) do
print (i,v)
end
end

return funcaoteste()

Neste caso, pairs() retorna os valores dos índices de tabela, mas table.unpack() continua não retornando nada.

Sei uqe devo estar cometendo algum erro básico nisso tudo e talvez esteja utilizando o table.unpack de forma incorreta. Encontrei algumas explicações em alguns fóruns, mas nenhuma conseguiu sanar minha dúvida.

Alguém poderia me ajudar a descobrir o que não está certo?

Valeu pessoal!!

[]'s


Ulisses

--
Você recebeu essa mensagem porque está inscrito no grupo "Lua BR" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para [hidden email].
Acesse esse grupo em https://groups.google.com/group/lua-br.
Para mais opções, acesse https://groups.google.com/d/optout.