Этот код не будет вызываться, если он находится за пределами определенной функции для класса. Если бы это было разрешено, все внутри класса было бы выполнено, как только вы создали класс, который не является желательным.
Тест:
t = {'a', 'b', 'c'}
print(t[0])
дает ноль
. Фактически 0 находится за пределами границ (попробуйте t [20]
) ... поэтому random должно быть от 1 до #myTable
(включительно), потому что первый элемент таблица помечается (индексируется) как 1, если вы пишете просто exp
, см. Конструктор таблиц (" Наконец, поля формы exp эквивалентны [i] = exp, где i - последовательные целые числа, начинающиеся с 1. ").
Если вы передадите в math.random только аргумент n
, вы получите случайное число от 1 до n
включительно. Это исправляет ваш пример:
print(myTable[math.random(#myTable)])
Lua индексирует таблицы с 1, в отличие от C, Java и т. Д., Которые индексируют массивы с 0. Это означает, что в в вашей таблице допустимые индексы: 1, 2, 3, 4. Вы ищете следующее:
print( myTable[ math.random( #myTable ) ] )
При вызове с одним аргументом math.random (n)
возвращает случайное целое число от 1 до n
включительно.