gpt4 book ai didi

c# - 读取键为 System.Double 的嵌套 Lua 表

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:19 25 4
gpt4 key购买 nike

使用 C# 和 LuaInterface,我试图读取一个嵌套表,但是当我尝试打开包含该表的键时得到一个空 LuaTable。

.lua 文件:

DB = {
["inventory"] = {
[10001] = {
["row"] = 140,
["count"] = 20,
},
[10021] = {
["row"] = 83,
["count"] = 3,
},
[10075] = {
["row"] = 927,
["count"] = 15,
},
}
}

我可以成功地获取库存下的条目,方法是打开该表:

LuaTable tbl = lua.GetTable("DB.inventory");
foreach (DictionaryEntry de in tbl)
...

我不能做的是打开库存项目并以相同的方式枚举其条目。这是因为 key 是 System.Double 类型吗?这失败了:

LuaTable tbl = lua.GetTable("DB.inventory.10001");
foreach (DictionaryEntry de in tbl)

有一个异常(exception),因为 tbl 为空。

实际上,一旦我枚举了键(库存项目),我就想深入了解嵌套表并使用这些内容。如您所见,我无法按照自己的方式获取对嵌套表的引用。

最佳答案

看来 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,
},
}
}

我认为这会奏效。请注意,Norman Ramsey 的建议虽然完全适用于正确的 Lua,但会破坏 LuaInterface,因此您应该像以前一样单独使用点进行索引(尽管对于任何普通的 Lua 程序员来说这看起来像是一个错误)。

关于c# - 读取键为 System.Double 的嵌套 Lua 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2527310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com