Похоже, что LuaInterface поддерживает только строковые ключи. Из Lua.cs эта функция в конечном итоге вызывается вашим кодом:
internal object getObject(string[] remainingPath)
{
object returnValue=null;
for(int i=0;i<remainingPath.Length;i++)
{
LuaDLL.lua_pushstring(luaState,remainingPath[i]);
LuaDLL.lua_gettable(luaState,-2);
returnValue=translator.getObject(luaState,-1);
if(returnValue==null) break;
}
return returnValue;
}
Обратите внимание, что для ключей, которые не являются строками, не предусмотрено, потому что этот код вызывает lua_pushstring()
с частью строки, которую вы проиндексировали.
Способ, которым LuaInterface принимает строковый аргумент с разделителями в виде точки к operator[]()
, является дефектным. Вы нашли один недостаток; другой появится, если вы попытаетесь найти ключ, который на самом деле содержит точку (что является законным Lua - хотя и не идиоматично, бывают случаи, когда вы обнаруживаете, что самый естественный способ выразить ключ не с чем-то это выглядит как идентификатор C).
LuaInterface должен предоставить метод индексации, принимающий типы, отличные от строк. Поскольку это не так, вы можете переписать таблицу следующим образом:
DB = {
["inventory"] = {
["10001"] = {
["row"] = 140,
["count"] = 20,
},
["10021"] = {
["row"] = 83,
["count"] = 3,
},
["10075"] = {
["row"] = 927,
["count"] = 15,
},
}
}
Я думаю, это будет работать. Обратите внимание, что предложение Нормана Рэмси, хотя и вполне подходит для правильного Lua, будет нарушено в LuaInterface, поэтому вы должны индексировать только с точками, как и раньше (несмотря на то, что это будет выглядеть как ошибка для любого нормального программиста Lua).