Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

I don't Understand "How Lua save data on the same variable when we Iterate over it"

I know Lua remember value in the same field/function with the Same defined Variable. but I still lack the concept behind it. Let’s say I’see Int Variable = 2 which can be modify if we iterate over it Int variable = 8

Same logic I was applying on the Code. I got the results, but I didn’t understand the concept behind it.

You Can see in my Code I was saving some value in Var x and saveX

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

and I was doing saveX = x from my logic The value of x should be saved inside saveX instead it was saving the loop value as I’m applying over it. Why is that?

-- Graphical Representation of table1
--[[ { {  {},{},{},{}  },
       {  {},{},{},{}  },
       {  {},{},{},{}  },
       {  {},{},{},{}  }  }  ]]

_Gtable1 = {}

for y = 1, 4 do

    table.insert(_Gtable1, {})
    for x = 1, 4 do
        table.insert(_Gtable1[y], {
            x = (x - 1) * 10, --Coordinate value of X
            y = (y - 1) * 10, --Coordinate value of Y

            -- what if i want to save Coordinate value on another variable How should i do?

            saveX = x, -- Saving Loop X
            saveY = y, -- Saving Loo Y

            t = "Check" -- to Debug

        })
    end
end
ti = _Gtable1

for y = 1, 4 do
    for x = 1, 4 do
        tim = ti[y][x]
        -- print(tim.saveX) -- output 1, 2, 3, 4
        print(tim.x) -- output 0, 10, 20, 30

    end
end

>Solution :

I hope I understood the question:

Let’s simplify the example:

local t = {
    x = 10,
    y = x,
}

You assume t.y is 10, because you declared it a line before that? But it is nil here, because x = 10, is no variable. It’s part of the table constructor and can not be referenced in the same constructor. Check out https://www.lua.org/pil/3.6.html for more details.

After the constructor has finished, you can access that as t.x (not x!).

Now for your example, you need to move (x - 1) * 10 outside the constructor, e.g.: local tempX = (x - 1) * 10. Then use tempX inside the constructor. Or you can set your values individually, e.g. _Gtable1[y][x].saveX = _Gtable1[y][x].x. I would prefer the former.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading