В качестве предисловия я использую repl.it, а не Lua на рабочем столе. Это может быть проблемой, но я не могу быть уверен, поскольку у меня нет легкого доступа к другому переводчику Lua.
У меня проблема с более крупной программой, но та же проблема видна в следующем фрагменте:
stuff = {}
list = {"hello"}
table.insert(stuff,list)
table.remove(list)
print(unpack(stuff[1]))
При запуске я ожидаю, что он распечатает неупакованную таблицу, найденную на stuff[1]
, которая должна быть "hello"
, потому что это значение list
, когда я его установил. Использование предпочтительного метода вставки и удаления, как показано ниже, дает те же результаты.
test = {}
help = {"hello"}
test[#test+1] = help
help[#help] = nil
print(unpack(test[1]))
Однако, если я не называю длину, а использую магическое число или константу, она работает просто отлично, как в двух примерах ниже.
what = {}
the = {"hello"}
what[1] = the
the = nil
print(unpack(what[1]))
how = {}
questionmark = {"hello"}
one = 1
what[one] = questionmark
questionmark = nil
print(unpack(what[one]))
Наконец, этого нет, если не используются вложенные таблицы, как в этом примере:
notnested = {}
nottable = "hello"
notnested[#notnested+1] = nottable
nottable = nil
print(notnested[1])
Что здесь происходит? Я неправильно понимаю сроки объявлений, что-то делаю неправильно или виноват repl.it/Lua?
Это repl.it из пяти приведенных выше примеров: https://repl.it/@typhirz/LightsalmonDenseCodeview