я могу индексировать массив lua с другим, чем целое число - PullRequest
1 голос
/ 21 февраля 2011

Допустимо ли использование метатаблицы (или строки) в качестве индекса для массива. Часть кода ниже (которая ничего не делает), кажется, позволяет это. Я искал в руководстве / интернете и т. Д., Но не могу найти, является ли это допустимым синтаксисом, или он просто работает. Если бы кто-то мог подтвердить, что это законно, я был бы признателен.

(кстати, если это законно, это дает мне возможность индексировать массивы с помощью метатаблиц, что дает немало возможностей. Например, многозначный ключ, доступный для индексации таблицы БД и т. Д.)

x = { val = 3 }      -- our object

mt = {
    __index = function (table, key)
        print(key)
        return table.val
    end,
    __newindex = function (t,k,v)
        print(k)
        t.val = v
      end
    }

setmetatable(x, mt)


print(x[1])
print({1,2})
x["hello"] = 4
print(x[1])

1 Ответ

9 голосов
/ 21 февраля 2011

"Таблица типов реализует ассоциативный массивы, то есть массивы, которые могут быть индексируется не только цифрами, но и с любым значением (кроме нуля). " http://www.lua.org/manual/5.1/manual.html#2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...