Lua table.foreach отсутствует

Я довольно много использовал 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.

Может кто-нибудь сказать мне, где я испортил или что мне не хватает?

table.foreach устарела в Lua 5.1 и удалена в Lua 5.2. Онлайн-демонстрация Lua всегда работает с последней версией Lua, то есть Lua 5.4.4.
lhf 11.01.2023 11:15

так как вы просили об изменении: github.com/lua/lua/commit/… оно было удалено почти 13 лет назад

Luke100000 11.01.2023 11:16

хорошо, это еще более странно, так как я четко помню, как использовал table.foreach в прошлый раз, когда тестировал часть своего кода. и, кроме того, страница на lua-users.org/wiki/TableLibraryTutorial, последняя редакция 2017 года, содержит table.foreach, но 5.2 относится к 2015 году.

Radinator 11.01.2023 11:22

есть ли замена table.foreach?

Radinator 11.01.2023 11:23

Но ваш связанный учебник ссылается на ссылку 5.1.

Luke100000 11.01.2023 11:33

Замена в основном pairs, и если вам действительно нужна аналогичная функция (например, для совместимости), вы можете написать ее самостоятельно (которая внутри просто снова использует пары)

Luke100000 11.01.2023 11:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка «попытка вызвать нулевое значение (поле 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.

Luke100000 11.01.2023 16:34

Другие вопросы по теме