Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Can you edit a table with recursion?

Asked by 5 years ago

I have a function that goes through a table recursively to find a key, then changes the key's value. However, despite the function running without error, and the print statements in the middle printing what I expect, the values within the original table aren't changed. I feel like the values the script is altering aren't the actual values from the original table.

function dataManager.setStat(player, statName, newValue)
    local statFound = false
    local function recursiveIteration(curTable)
        for key,value in pairs(curTable) do
            if key == statName then
                print(key , " = " , value)
                statFound = true
                value = newValue
                print(key , " = " , value)
            elseif type(value) == "table" then
                recursiveIteration(value)
            end
        end
    end
    waitForSessionStats(player)
    recursiveIteration(sessionStats[getScope(player)])
    return statFound
end

I get the output statName = oldValue statName = newValue

But the original table's values don't change.

1 answer

Log in to vote
0
Answered by 5 years ago

Alright had to get some sleep but then I figured out what I was doing wrong.

value = newValue isn't the correct way of setting a value (this is what coding late at night gets me).

curTable[key] = newValue is what I should have been doing. value is just a search index, so I wasn't doing anything to the table at all by changing the search index to newValue. Going back and getting curTable then indexing curTable[key] and setting that to newValue changed the original table for me.

Ad

Answer this question