Это не стандартная Lua, похоже, вы используете какую-то оболочку C ++, с которой я не знаком, но я могу сделать некоторые предположения
В первой строке мы создаем новую таблицу, но вторая строка
немного сбивает с толку. В этой таблице мы только что создали, мы устанавливаем
элемент с ключом __index, равным самой таблице. Почему __index
выбран в качестве ключа и зачем устанавливать элемент таблицы равным
сам стол?
__index
- это специальный ключ при использовании метатаблиц. Если у меня есть таблица t
, и я пытаюсь проиндексировать ее, например, ключом foo
, естественно, я вернусь к значению, связанному с этим ключом. Но допустим, там ничего нет. Обычно, если вы попытаетесь проиндексировать место, где нет ничего, вы получите nil
назад.
Но нет, если у вас есть метатабель со специальным ключом __index
! Если у вас есть метатабель с функцией или таблицей __index
, он будет использовать ее для определения вашего значения. Если у вас есть таблица, назначенная для __index, как здесь, она будет просматривать эту таблицу и возвращать значение по указанному вами ключу. Это позволяет вам получить поведение, подобное наследованию. то есть, если таблица t не имеет этого значения, по умолчанию используется значение в этой другой таблице.
But for the last line, is that just creating a global Lua variable called "obj1"? At this point "obj1" and "MultiObjectMetaTable" will be global Lua variables?
Как я уже говорил, это не стандартный Lua, поэтому я не совсем уверен, что там происходит. (Смешение C ++ и Lua может оказаться сложным, поэтому, хотя вы все еще изучаете Lua, вероятно, лучше придерживаться интерфейса C, чтобы вы могли понять, что происходит на самом деле. Как только вы поймете, что можете перейти к более автоматизированным решениям)