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

how to get the value of an nil index?

Asked by 5 years ago
Edited 5 years ago

what im trying to do is getting the value of an nil index, like if there was only 3 values in the table and i tried to index a 4th index in the table. it would return the 1st value; index a 5th index = 2nd value. i know i can just subtract the index by the length of the table, but that wont work for most indexes.

local array = {10,30,40,50,60}

print(array[6]) -- i want it to print the first index which is 10
print(array[7]) -- 30
print(array[8]) -- 40

-- i can only index with a nil index up to a 10th index until it returns nil using index - #array

print(array[11-#array]) -- nil
print(array[10-#array]) -- 60
0
Nil indices have no value. DeceptiveCaster 3761 — 5y
0
can u read my question again ilikepizzaboy13423 4 — 5y

1 answer

Log in to vote
3
Answered by
RayCurse 1518 Moderation Voter
5 years ago

Whenever you need a value that wraps around like you just mentioned, the first thing that should come to mind is the modulo operator % also called the remainder operator. The modulo operator receives two operands and returns the remainder when the first is divided by the second. For example, 17 % 5 = 2 and 5.6 % 1 = 0.6. This logic leads to the following solution:

```lua local array = {10 , 30 , 40 , 50 , 60}

function wrap(n , x) return (n - 1) % x + 1 --% has higher precedence then + end print(array[wrap(5 , #array)]) --60 print(array[wrap(234 , #array)]) --50 print(array[wrap(-2 , #array)]) --40 ``` If we want, we can also use metatables to further abstract this logic away:

lua local array = setmetatable({10 , 30 , 40 , 50 , 60} , { __index = function(array , i) return array[wrap(i , #array)] end; __newindex = function(array , i , v) array[wrap(i , #array)] = v end; })

0
thanks ilikepizzaboy13423 4 — 5y
0
no problem RayCurse 1518 — 5y
Ad

Answer this question