LuaInterface - 一个返回LuaTable值的函数

时间:2013-01-13 01:06:31

标签: c# lua luainterface

有没有人知道,如何编写一个将返回LuaTable值的C#函数(例如{1 = "example1", 2 = 234, "foo" = "Foo Example"}? 我测试过的所有类型都返回LuaUserData值,这些值是非对/可执行的。 提前谢谢。

- update-- 与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

3 个答案:

答案 0 :(得分:3)

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

首先,让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"]

答案 1 :(得分:0)

user1829325提供了出色的方法,但它们没有经过修改就无法编译 lua.DoString返回一个数组,lua.NewTable不返回任何内容。

但它引导我进入以下解决方案,它运行得很好,所以+1反正!

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

返回一个应该从Lua调用的表的C#函数可能如下所示:

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

我还编写了一个marshall函数,它使用上面的函数将Dictionary转换为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;
}

答案 2 :(得分:0)

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

使用JCH2k逻辑我能够使用此函数将c#Point转换为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]