C# LuaInterface-返回LuaTable值的函数
有人知道如何编写一个C#函数来返回一个可计算的值(例如C# LuaInterface-返回LuaTable值的函数,c#,lua,luainterface,C#,Lua,Luainterface,有人知道如何编写一个C#函数来返回一个可计算的值(例如{1=“example1”,2=234,“foo”=“foo example”}? 我测试过的所有类型都返回了非pair/ipairable的LuaUserData值。 提前谢谢 --更新-- 在我看来,最接近luaTable的类型是ListDictionary: [LuaFunc(Name = "table", Desc = "returns test LuaTable", Params = new string[] { }
{1=“example1”,2=234,“foo”=“foo example”}
?
我测试过的所有类型都返回了非pair/ipairable的LuaUserData
值。
提前谢谢
--更新--
在我看来,最接近luaTable的类型是ListDictionary:
[LuaFunc(Name = "table", Desc = "returns test LuaTable", Params = new string[] { })]
public System.Collections.Specialized.ListDictionary table()
{
var k = new System.Collections.Specialized.ListDictionary(){
{"1",1},
{2,"2"}
};
return k;
}
但是它在Lua中仍然被认为是LuaUserData,不能成对/ipaired对于这个问题有两种可能的解决方案 首先,让Lua返回表:
LuaTable lt = (LuaTable) lua.DoString("return {1 = "example1", 2 = 234, "foo" = "Foo Example"}")[0];
第二种可能是创建一个新表
LuaTable lt = lua.NewTable("ThisTable")
lt["1"] = "example1"
lt["2"] = 234
lt["foo"] = "Foo Example"
您可以从Lua到访问第二个表
ThisTable[1] = ThisTable["foo"]
user1829325提供了极好的方法,尽管它们不需要修改就可以编译。
lua.DoString返回数组,lua.NewTable不返回任何内容。 但它让我找到了下面的解决方案,它运行得非常完美,所以不管怎样+1
public LuaTable CreateTable()
{
return (LuaTable)lua.DoString("return {}")[0];
}
一个C#函数返回一个表,该表应该从Lua调用,它可以如下所示:
LuaTable newtable = CreateTable();
table["lala"] = 5;
return table;
我还编写了一个marshall函数,它使用上面的函数将字典转换为LuaTable:
private LuaTable MarshalDictionaryToTable<A,B>(Dictionary<A, B> dict)
{
LuaTable table = runner.CreateTable();
foreach (KeyValuePair<A, B> kv in dict)
table[kv.Key] = kv.Value;
return table;
}
专用LuaTable MarshalDictionaryTable(字典目录)
{
LuaTable table=runner.CreateTable();
foreach(dict中的键值对kv)
表[kv.键]=kv.值;
返回表;
}
JCH2k是正确的。NewTable没有返回类型
使用JCH2k逻辑,我能够使这个函数将c#点转换为LuaTable
public LuaTable ConvertPointToTable(Point point)
{
return (LuaTable)lua.DoString("return {" + point.X + ", " + point.Y + "}")[0];
}
在Lua中使用一次返回
local x = val[1]
local y = val[2]
请提供一个源代码示例,说明您当前如何在C#端构造表及其值。您正在使用哪些函数以及如何使用Lua虚拟堆栈?您可能会发现这篇堆栈溢出文章很有帮助。我已经找到了这种方法,但我正在寻找C#解决方案。不确定“C#解决方案”是什么意思因为StAcExcel是C语言,问题是LUA引擎是用C语言编写的,所以你必须有一个C到C接口来进行二者之间的封送和转换。用C或C++,直接使用Lua引擎中提供的函数,允许你在LuaV上建立表和这样的函数。然后调用将生成的表提供给Lua引擎的函数。