Using a function in a module script, I am getting a nil value that is confusing the lights out of me. Can someone help me debug this? I am using this function to produce a 6 digit string/integer key for a table index. The zVal is nil when passed to the function for some reason. the xVal was passed properly, however.
Error: ReplicatedStorage.MazeDataGenerator:63: attempt to compare number with nil
Module Script:
function module:GetIndexKey(xVal, zVal) local xStr = '' local zStr = '' --zVal is nil, even though 0 was passed in the argument; added this if statement prevent nil error if xVal ~= nil and zVal ~= nil then if xVal >= 0 and xVal <= 9 then xStr = "00" .. tostring(xVal) elseif xVal > 9 and xVal <= 99 then xStr = "0" .. tostring(xVal) else xStr = xVal end if zVal >= 0 and zVal <= 9 then -- The error occurs here if I don't have the nil check zStr = "00" .. tostring(zVal) elseif zVal > 9 and zVal <= 99 then zStr = "0" .. tostring(zVal) else zStr = tostring(zVal) end else print ("nil values in xVal or zVal") print (xVal) print (zVal) end return (xStr .. zStr) end
Calling function:
for x = 0,_sizeX do for z = 0,_sizeZ do -- Here, z = 0 in the first loop local indexKey = mazeDataGenerator.GetIndexKey(x, z) print(indexKey) if mazeData[indexKey] == 0 or mazeData[indexKey] == nil then msg = msg .. "..." else msg = msg .. "==" end end msg = msg .. "\n" end print(msg)
is the way that you've written the function in your module script and how you are calling it in your other script
--Module function module:GetIndexKey(xVal, zVal) --Other script local indexKey = mazeDataGenerator.GetIndexKey(x, z)
Notice how in your module, your function is written as :GetIndexKey()
with a colon, but your other script has it as .GetIndexKey
with a period. They need to match up.
--Module function module.GetIndexKey(xVal, zVal) --Other script local indexKey = mazeDataGenerator.GetIndexKey(x, z) --Other solution: --Module function module:GetIndexKey(xVal, zVal) --Other script local indexKey = mazeDataGenerator:GetIndexKey(x, z)
You could also just put a random value before x in your function, like mazeDataGenerator.GetIndexKey(0, x, z)
, but I would not recommend at all.
Hope it helps!