Большинство языков предлагают способ эффективно реализовать карты для ЛЮБОГО типа ключа либо с помощью отношения эквивалентности и хеш-функции (с хеш-таблицами), либо с использованием отношения порядка (с деревьями).
Однако кажется, что таблицы Lua предлагают это только для строк. В частности, если в качестве ключа используется таблица Lua (концептуально реализующая «объект»), ее можно будет найти снова только со ссылкой на тот же объект, но не на новый объект с тем же «содержимым».
Это своего рода требуется для реализации поведения, аналогичного индексу базы данных или кешу для некоторого значения на основе «уникальных» ключей, по крайней мере, без использования линейного поиска по времени.
Единственное, что я мог придумать, это то, что если ключевой объект состоит из полей f1,...,fn
, мы могли бы сделать кучу вложенных карт и посмотреть их так T[f1][f2]...[fn]
(по крайней мере, если поля сами являются целыми числами или строками). Это довольно ужасно и нарушает намерение инкапсулировать f1,...,fn
в «объект».
Есть другие идеи?
__index
метаметод в своей таблице? Это позволяет вам самостоятельно управлять способом использования индексов. Затем вы можете проверить содержимое ключевой таблицы вместо ссылки на нее. См. lua.org/pil/13.4.1.html. - person SolarBear   schedule 22.08.2013