Я довольно много использовал https://www.lua.org/cgi-bin/demo, чтобы быстро собрать несколько скриптов и проверить, действительно ли они работают. Но сегодня я наткнулся на нечто очень странное.
Тестирование этого кода
local t = {}
local threshold = 3
local counter = 0
t["1"] = true
t["2"] = true
t["3"] = false
t["4"] = true
table.foreach(t, print)
table.foreach(
t,
function(k,v)
if v then
counter = counter + 1
end
end
)
print(counter)
дал мне это сообщение об ошибке
input:9: попытка вызвать нулевое значение (поле foreach)
поэтому я попытался запустить
for k,v in pairs(table) do
print(k,v)
end
в результате этого вывода
concat function: 0x42be90
remove function: 0x42bca0
sort function: 0x42ba50
move function: 0x42baf0
insert function: 0x42bda0
unpack function: 0x42b2a0
pack function: 0x42b3a0
Поскольку около года назад я в последний раз использовал этот сайт для тестирования своего кода, я не могу точно сказать, когда произошли изменения. Или если были изменения. Я совершенно уверен, что в последний раз, когда я использовал этот сайт, я использовал функцию table.foreach
. Но теперь это не работает.
Я также проверил журнал изменений на случай, если я пропустил какое-либо изменение, но https://www.lua.org/versions.html не показывает никаких изменений после июня 2020 года с версией 5.4.
Может кто-нибудь сказать мне, где я испортил или что мне не хватает?
так как вы просили об изменении: github.com/lua/lua/commit/… оно было удалено почти 13 лет назад
хорошо, это еще более странно, так как я четко помню, как использовал table.foreach в прошлый раз, когда тестировал часть своего кода. и, кроме того, страница на lua-users.org/wiki/TableLibraryTutorial, последняя редакция 2017 года, содержит table.foreach, но 5.2 относится к 2015 году.
есть ли замена table.foreach?
Но ваш связанный учебник ссылается на ссылку 5.1.
Замена в основном pairs
, и если вам действительно нужна аналогичная функция (например, для совместимости), вы можете написать ее самостоятельно (которая внутри просто снова использует пары)
Ошибка «попытка вызвать нулевое значение (поле foreach») указывает на то, что функция table.foreach() не определена. Эта ошибка, вероятно, вызвана тем, что функция table.foreach() была удалена в Lua 5.3. В Lua 5.3 эквивалентным методом перебора таблицы является функция pairs().
Чтобы исправить эту ошибку, вы можете заменить table.foreach на for k, v в парах (t) и заменить вторую таблицу. foreach на for k, v в парах (t) сделать
for k, v in pairs(t) do
print(k,v)
end
counter = 0
for k, v in pairs(t) do
if v then
counter = counter + 1
end
end
print(counter)
Удалено в 5.2, а не в 5.3.
table.foreach
устарела в Lua 5.1 и удалена в Lua 5.2. Онлайн-демонстрация Lua всегда работает с последней версией Lua, то есть Lua 5.4.4.