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

Why does the called function return nil if it should be returning something?

Asked by
Trew86 175
5 years ago
Edited 5 years ago

Hi everyone, I just started using module scripts and I've gotten pretty far with it, but I have a problem with using return.

part of the function that uses return:

local selectRoute = function(train, model)
    local route = train.PrimaryPart.Values.RouteValue.Value
    local given = model:FindFirstChild("GivenPath")

    local greenLitPaths = {}
    local yellowLitPaths = {}

--------omitted many lines of code

    local function findBestPath()
        searchPathOptions()
        if #greenLitPaths == 1 then
            local array = greenLitPaths[1]
            print(array[1])
            return array[1]
        elseif #greenLitPaths > 1 then 
            sort(greenLitPaths)
            local array = greenLitPaths[1]
            print(array[1])
            return array[1]
        elseif #greenLitPaths < 1 then
            if #yellowLitPaths == 1 then
                local array = yellowLitPaths[1]
                print(array[1])
                return array[1]
            elseif #yellowLitPaths > 1 then
                sort(yellowLitPaths)
                local array = yellowLitPaths[1]
                print(array[1])
                return array[1]
            end
        end
        resetTables()
    end

    if given ~= nil then
        if given.Values.BlockingTrain.Value == nil then
            findBestPath()
        end
    else
        findBestPath()
    end

end

function that uses selectRoute:

module.initiateChoice = function(train, model)
    local chooseRoute = selectRoute(train, model)
    print(chooseRoute)
    repeat 
        wait()
    until chooseRoute ~= nil
        local affected = chooseRoute:FindFirstChild("AffectedPaths")
        local light = model.Values.Light.Value
        local status = model.Values.Status
        status.Value = chooseRoute.Values.Status.Value
        switchMod.setSwitches(chooseRoute.Switches)
        light.TrackDisplay.SurfaceGui.TextLabel.Text = chooseRoute.Values.ToTrack.Value
        module.exist(affected, function(object)
        module.alertAffected(train, object)
        end)
end

I noticed that selectRoute prints an existing object when it's called, but printing chooseRoute puts "nil" in the output. Unless I'm mistaken, these are the exact same things, but they have different outputs. Can someone explain this?

By the way, I know it's super long, but if I can solve this problem then I will make a huge step towards completing my concept.

Answer this question