Hi, I have no clue why the following dosn´t work:
function createGraph()
for i=1, 60 do
graph = {}
graph = {id= i, x=40*i, y=65}
return graph
end
end
createGraph()
print(graph[1].x) --> print 40, all fine here
print(graph[2].x) --> gives me a error, because nil value :-( but why???
I like to create a table which get filled at the start of the program... very many thanks for help!
table & for loop
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
Re: table & for loop
Your graph table only has one line because you're reinitializing it on every run of the loop
Move graph = {} two lines higher (so that it's before the for i=1,60)
Don't worry, it happened to me too
Move graph = {} two lines higher (so that it's before the for i=1,60)
Don't worry, it happened to me too
-
- Party member
- Posts: 559
- Joined: Wed Oct 05, 2016 11:53 am
Re: table & for loop
Got ninja'd by Zireael but I'll post what I wrote anyway.
Your code has a few problems, so let's step through it:
After that you can use graph[1].x, graph[2].id, or whatever other fields you need.
Your code has a few problems, so let's step through it:
- Initialize the for loop, so far so good.
- Take the global variable graph, and assign a table into it. However, because this assignment is done for every for loop iteration, the table gets overwritten and thus emptied.
- Write a table with fields id, x and y to the variable graph. This will overwrite the empty table done during the previous step, and as such does it for every iteration.
- You prematurely end the for loop by breaking out of it with the "return" keyword; which means that the for loop actually breaks during the first iteration. As such, even if above two points were fixed you'd only get a graph with length of one.
Code: Select all
function createGraph()
graph = {}
for i=1, 60 do
graph[i] = {id= i, x=40*i, y=65}
end
return graph -- Only return the graph once the for loop has finished
end
createGraph()
Re: table & for loop
thank you both :-)
- Positive07
- Party member
- Posts: 1014
- Joined: Sun Aug 12, 2012 4:34 pm
- Location: Argentina
Re: table & for loop
Code: Select all
function createGraph()
local graph = {}
for i=1, 60 do
graph[i] = {id= i, x=40*i, y=65}
end
return graph -- Only return the graph once the for loop has finished
end
local graph = createGraph()
Make graph local otherwise you would be overriding a global variable
for i, person in ipairs(everybody) do
[tab]if not person.obey then person:setObey(true) end
end
love.system.openURL(github.com/pablomayobre)
[tab]if not person.obey then person:setObey(true) end
end
love.system.openURL(github.com/pablomayobre)
- darkmetalic
- Prole
- Posts: 17
- Joined: Tue Feb 07, 2017 4:09 pm
- Contact:
Re: table & for loop
Loops are a number of repetitions inside a scope (do end repeat until), the loop can be broken using [break] (while true do break end), or it can terminate when you determine or be infinite (while true do end) and cause an infinite loop [crashing your project and bombarding your system memory] if you do not pay attention to what you're doing. . Placing local in your table is important because what will be useful to it is only the return that will be the table to a variable that will become this table, if not by local before it will be global from this function.
Code: Select all
function createGraph()
local graph = {}
for i=1, 60 do
graph[i] = {id=i,x=40*i,y=65}
end
return graph
end
function createGraph()
local graph,i = {},1
while i<=60 do
graph[i]={id=i,x=40*i,y=65}
i=i+1
end
return graph
end
function createGraph()
local graph,i = {},1
repeat
graph[i]={id=i,x=40*i,y=65}
i=i+1
until i>60
return graph
end
Who is online
Users browsing this forum: Bing [Bot] and 4 guests