一个返回lutable值的函数

本文关键字:lutable 函数 返回 一个 | 更新日期: 2023-09-27 17:52:16

有没有人有一个想法,如何写一个c#函数,将返回一个LuaTable值(例如{1 = "example1", 2 = 234, "foo" = "Foo Example"} ?我测试过的所有类型都返回非配对/不可对的LuaUserData值。提前谢谢。

——更新我认为最接近lutable的类型是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而不能是pair/ipailed

一个返回lutable值的函数

这个问题有两种可能的解决方案。

第一个是让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返回一个数组。NewTable不返回任何值

但这让我想到了下面的解决方案,它运行得很好,所以无论如何+1 !

public LuaTable CreateTable()
{
    return (LuaTable)lua.DoString("return {}")[0];
}

一个c#函数返回一个应该从Lua调用的表,看起来像这样:

LuaTable newtable = CreateTable();
table["lala"] = 5;
return table;

我还编写了一个marshall函数,它使用上面的函数将Dictionary转换为lutable:

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;
}

JCH2k是对的。NewTable没有返回类型!

使用JCH2k逻辑,我能够使这个函数将c# Point转换为lutable。

public LuaTable ConvertPointToTable(Point point)
{
return (LuaTable)lua.DoString("return {" + point.X + ", " + point.Y + "}")[0];
}

在Lua中使用一次return。

local x = val[1]
local y = val[2]