[Solved] get table in-between {}

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Post Reply
User avatar
GVovkiv
Prole
Posts: 45
Joined: Fri Jan 15, 2021 7:29 am

[Solved] get table in-between {}

Post by GVovkiv »

So, i kinda new to lua and i encountered with problem:

Code: Select all

a = {a, b}
a.b = {
  {
    c = 1
  }
}

print(a.b.c) --> nil instead of 1
so there exist way to get tables like this without deleting this brackets?:

Code: Select all

{
c = 1
}
Last edited by GVovkiv on Sat Jan 23, 2021 1:29 pm, edited 1 time in total.
User avatar
zorg
Party member
Posts: 3087
Joined: Thu Dec 13, 2012 2:55 pm
Location: Absurdistan, Hungary
Contact:

Re: get table in-between {}

Post by zorg »

With a = {a, b}, you're actually doing this: a = {[1] = a, [2] = b}, and at that time, both a and b are either nil, or whatever you set those, if you did.

The second issue is you doubling up the brackets, so again, you'll get this:
a.b = {[1] = {['c'] = 1}}

which can be printed with a.b[1].c instead... lose the extra brackets and it'll work:
a = {}
a.b = {
c = 1
}

You can also do it with the opening bracket on its own line, lua shouldn't complain:
a = {}
a.b =
{
c = 1
}
Me and my stuff :3True Neutral Aspirant. Why, yes, i do indeed enjoy sarcastically correcting others when they make the most blatant of spelling mistakes. No bullying or trolling the innocent tho.
User avatar
GVovkiv
Prole
Posts: 45
Joined: Fri Jan 15, 2021 7:29 am

Re: get table in-between {}

Post by GVovkiv »

zorg wrote: Fri Jan 22, 2021 10:31 pm With a = {a, b}, you're actually doing this: a = {[1] = a, [2] = b}, and at that time, both a and b are either nil, or whatever you set those, if you did.

The second issue is you doubling up the brackets, so again, you'll get this:
a.b = {[1] = {['c'] = 1}}

which can be printed with a.b[1].c instead... lose the extra brackets and it'll work:
a = {}
a.b = {
c = 1
}

You can also do it with the opening bracket on its own line, lua shouldn't complain:
a = {}
a.b =
{
c = 1
}
Well, a.b[1].c it exactly what I need, thank you
(but it kinda inconvenient)

Main problem with it I experience in Tiled
When it creat .lua file, it put some tables like

Code: Select all

tileset = {
{
<Data>
}
}
with double brackets instead of one
And it sucks

Manually deleting it can be painful, especially when you create/modify maps often
User avatar
ohai
Prole
Posts: 20
Joined: Thu Jan 21, 2021 9:06 pm

Re: get table in-between {}

Post by ohai »

GVovkiv wrote: Sat Jan 23, 2021 12:45 am Main problem with it I experience in Tiled
When it creat .lua file, it put some tables like

Code: Select all

tileset = {
{
<Data>
}
}
with double brackets instead of one
And it sucks
It's for a reason - Tiled has to have a way to denote multiple tilesets. Your quick snippet actually says "tileset" instead of "tilesets", so I guess that's where the confusion came from. If you only use one tileset, then it's absolutely correct to just take the first element from the table using [1]. I guess that for some use cases it would be better if Tiled exported it like:

Code: Select all

tilesets = {
  ground = { <Data> }
  trees = { <Data> }
}
but I guess they didn't put that much thought into it. Or maybe I'm wrong and it's more important for them to have tilesets ordered and be able to use ipairs() instead of pairs() to iterate over.
User avatar
GVovkiv
Prole
Posts: 45
Joined: Fri Jan 15, 2021 7:29 am

Re: get table in-between {}

Post by GVovkiv »

ohai wrote: Sat Jan 23, 2021 9:47 am
GVovkiv wrote: Sat Jan 23, 2021 12:45 am Main problem with it I experience in Tiled
When it creat .lua file, it put some tables like

Code: Select all

tileset = {
{
<Data>
}
}
with double brackets instead of one
And it sucks
It's for a reason - Tiled has to have a way to denote multiple tilesets. Your quick snippet actually says "tileset" instead of "tilesets", so I guess that's where the confusion came from. If you only use one tileset, then it's absolutely correct to just take the first element from the table using [1]. I guess that for some use cases it would be better if Tiled exported it like:

Code: Select all

tilesets = {
  ground = { <Data> }
  trees = { <Data> }
}
but I guess they didn't put that much thought into it. Or maybe I'm wrong and it's more important for them to have tilesets ordered and be able to use ipairs() instead of pairs() to iterate over.
("tileset" just for example)

Well, thanks for explaining, but i found out it myself

it was made for easing loading thing
for example, in tiled i can create 2 layer with different objects on it
in exported file it will looks something like

Code: Select all

layers = {
{ -- first layer
*layer 1 objects*
}

{ -- 2nd layer
*layer 2 objects*
}
}
which, i believe, can be fetch with something like:

Code: Select all

l = 1 -- layer index, i guess
print(layers[l])
where "l" can be "l = l + 1" when game done loading layer 1 or sometning like that
User avatar
darkfrei
Party member
Posts: 213
Joined: Sat Feb 08, 2020 11:09 pm

Re: [Solved] get table in-between {}

Post by darkfrei »

GVovkiv wrote: Fri Jan 22, 2021 10:21 pm So, i kinda new to lua and i encountered with problem:

Code: Select all

a = {a, b}
a.b = {
  {
    c = 1
  }
}

print(a.b.c) --> nil instead of 1
so there exist way to get tables like this without deleting this brackets?:

Code: Select all

{
c = 1
}

Code: Select all

print(a.b[1].c)
User avatar
GVovkiv
Prole
Posts: 45
Joined: Fri Jan 15, 2021 7:29 am

Re: [Solved] get table in-between {}

Post by GVovkiv »

darkfrei wrote: Sat Jan 23, 2021 7:49 pm
GVovkiv wrote: Fri Jan 22, 2021 10:21 pm So, i kinda new to lua and i encountered with problem:

Code: Select all

a = {a, b}
a.b = {
  {
    c = 1
  }
}

print(a.b.c) --> nil instead of 1
so there exist way to get tables like this without deleting this brackets?:

Code: Select all

{
c = 1
}

Code: Select all

print(a.b[1].c)
Question was already solved, but thanks for answer anyway
Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 42 guests