Почему я получаю эту "попытку вызова табличного значения" при переборе таблицы? - PullRequest
3 голосов
/ 07 мая 2019

Я пытаюсь найти ключ, связанный со значением таблицы, в моде Гарри на Lua, но я получаю сообщение об ошибке, как будто это не таблица.

Это часть более крупного решенияк ошибке, приводящей к сбою игры в чужом коде, который я поддерживаю / исправляю.

Короче говоря, мне нужно получить номер ключа в зависимости от его значения.простой короткий код, который имеет эту проблему:


function starttest()
     local tbl = {"a", "b", "c"}

     local printme = FindValueInTable(tbl, "c")

print(printme)

end

function FindValueInTable(table, value)
     for k, v in table do --errors on this line saying "attempt to call a table value"
          if v == value then
               return k
          end
     end
     return nil
end

Я нахожусь в тупике, что делать здесь, потому что table буквально таблица. Как может for k,v in table действительно терпеть неудачу?

В результате я ожидаю, что он вернет числовой ключ со значением в value.так что если value == "c" и table[3] имеют значение "c", то в результате должно быть возвращено 3.

1 Ответ

4 голосов
/ 07 мая 2019

Вам нужно использовать for k, v in ipairs(table) do вместо for k, v in table do, так как эта форма цикла for ожидает итератор после in, поэтому пытается "вызвать" вашу переменную table, что приводит к ошибке.

...