我有一堆 Lua 表形式的数据,我想将这些数据解析为 C# 中可用的结构。
Lua 表的问题在于存在可选字段,表是非常动态的,而不仅仅是一个键为一种类型、值为一种类型的字典。可以有一个 Lua 表同时包含字符串和整数键,以及整数、字符串类型的值和甚至表。
遗憾的是,我正在解析的数据利用了语言的动态特性,并不是以任何直接的方式真正构建的。这需要数据的动态表示,例如使用 Dictionary<object, dynamic>
。
数据的格式是例如(来自 http://ideone.com/9nzXvt )
local mainNode =
{
[0] =
{
Name = "First element",
Comments = "I have comments!",
Data = { {123, 456}; foo = { "bar" } }
},
[1337] =
{
Name = "Another element",
Data = { {0}; foo = nil }
}
}
是否有任何图书馆可以做到这一点?有什么方法可以在不逐字符解析数据的情况下实现这一点?
最佳答案
您可以使用 luainterface图书馆
有一些 sample code here .
您需要结合使用 DoFile
(加载文件)和 GetTable
将表读入 LuaTable
您可以使用来自 C# 的结果的对象。 LuaTable
通过 GetEnumerator
公开了一个 IDictionaryEnumerator
。
编辑:
如果你有这个表构造器:
local t = { os.time() }
print(t[1]);
需要执行构造函数中的函数来初始化数据。
对于常量字面值,你可以有这样的字符串常量:
local a = [==[
hello
there""\"]==]
具有不同级别的等号
一个数字文字可以有以下形式:
0X1.921FB54442D18P+1
以 P 作为二进制指数。
在不使用轻量级 lua VM 的情况下忠实地再现常量文字的 lua 语法将需要重新实现 lua 语言规范的大部分内容。重新发明轮子并没有多大好处。
关于c# - 如何最好地解析任何常量 Lua 表而不将其加载到 Lua VM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220110/