Я работаю над интеграцией Lua с C ++. Я хочу иметь возможность выставлять значения C ++ в Lua иерархическим способом, который может не соответствовать тому, как значения хранятся на стороне C ++. Я хочу иметь возможность сделать что-то вроде
a.b.c = 5
print(a.b.c)
, и функция a на стороне C ++ получит 'a', 'b', 'c' и 5 для первого случая и просто ' a ',' b ',' c 'для второго случая. Для этого я создал таблицу, содержащую ключи и метатаблицу, чьи методы __index
и __newindex
заботятся о логи c, сейчас это выглядит примерно так:
metatable.__index = function(t, k)
rawset(t, t.index, k)
t.index = t.index + 1
return t
end
metatable.__newindex = function(t, k, v)
rawset(t, t.index, k)
return newindexCallback(t, v)
end
Это прекрасно работает для установки значений, но получение значений не работает, потому что a.b.c
приводит к таблице, а не к фактическому значению. Есть ли способ для метода __index
узнать, что он последний в цепочке? Или другой метаметод, который вызывается, когда значение действительно используется? Или я должен прибегнуть к использованию геттеров и сеттеров?