behold the source…
fill_table = {}
string.split = function(str, pattern)
pattern = pattern or "[^%s]+"
if pattern:len() == 0 then pattern = "[^%s]+" end
local parts = {__index = table.insert}
setmetatable(parts, parts)
str:gsub(pattern, parts)
setmetatable(parts, nil)
parts.__index = nil
return parts
end
local first_string = "0,12,7,4,12,7,4,3,4,7"
local first_string = "0,4,8,12,16,18,24,32,34,36,40,42,44,48,50,52,54"
local second_string = "0,4,8,12,16,18,24,32,34,36,40,42,44,48,50,52"
local first_value_table = first_string:split( "[^,%s]+" )
local second_value_table = second_string:split( "[^,%s]+" )
local end_figure = #first_value_table
local leading_table = 1 --Notes
local sub_position = 1
local offset = 0
for t = 0, 80 do
fill_table[t] = 999
end
if #first_value_table < #second_value_table then
end_figure = #second_value_table
leading_table = 2
end
for t = 0, end_figure-1 do
if leading_table == 1 then
fill_table[second_value_table[sub_position]+offset] = first_value_table[t+1]
print('position ',second_value_table[sub_position]+offset,
' contains value:',fill_table[second_value_table[sub_position]+offset])
sub_position = sub_position + 1
if sub_position > #second_value_table then
offset = offset + tonumber(second_value_table[sub_position-1])
if tonumber(second_value_table[1]) > 0 then
sub_position = 1
else
sub_position = 2
end
end
else
fill_table[second_value_table[t+1]] = first_value_table[sub_position]
-- print(second_value_table[t+1],fill_table[second_value_table[t+1]])
sub_position = sub_position + 1
if sub_position > #first_value_table then
sub_position = 1
end
print('position ',second_value_table[t+1],' contains value:',fill_table[second_value_table[t+1]])
end
end
print('bound:',#fill_table)
print('value on position 0:',fill_table[0])
print('value on position 4:',fill_table[4])
print('value on position 8:',fill_table[8])
there are two definitions of first_string.
This is the result after execution with the larger of the two defined:
position 0 contains value: 0
position 4 contains value: 4
position 8 contains value: 8
position 12 contains value: 12
position 16 contains value: 16
position 18 contains value: 18
position 24 contains value: 24
position 32 contains value: 32
position 34 contains value: 34
position 36 contains value: 36
position 40 contains value: 40
position 42 contains value: 42
position 44 contains value: 44
position 48 contains value: 48
position 50 contains value: 50
position 52 contains value: 52
position 56 contains value: 54
bound: 80
value on position 0: 0
value on position 4: 4
value on position 8: 8
value on position 1: 999
value on position 5: 999
value on position 9: 999
This is the result with the secondary definition commented out:
position 0 contains value: 0
position 4 contains value: 12
position 8 contains value: 7
position 12 contains value: 4
position 16 contains value: 12
position 18 contains value: 7
position 24 contains value: 4
position 32 contains value: 3
position 34 contains value: 4
position 36 contains value: 7
position 40 contains value: 0
position 42 contains value: 12
position 44 contains value: 7
position 48 contains value: 4
position 50 contains value: 12
position 52 contains value: 7
bound: 80
value on position 0: 999
value on position 4: 999
value on position 8: 999
value on position 1: 999
value on position 5: 999
value on position 9: 999
fill_table (being defined globally) is somehow being restored to its former address after it has been populated when the if condition was not met. But you can see clearly that the values get populated inside the for…do construction, yet as soon as i want to fetch these values outside this function, they are all gone.
The table is not redefined locally anywhere so that is the reason why i don’t understand it keeps the values outside the for-loop if the condition is met but not when the condition is not met.
I’m quite baffled here (But i hope i’m also quite blind or too tired to see something)