3

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として認識されており、ペアリング/ペアリングすることはできません

4

3 に答える 3

3

この問題には2つの解決策があります。

1つ目は、Luaにテーブルを返させることです。

LuaTable lt = (LuaTable) lua.DoString("return {1 = "example1", 2 = 234, "foo" = "Foo Example"}")[0];

2番目の可能性は、新しいテーブルを作成することです

LuaTable lt = lua.NewTable("ThisTable")
lt["1"] = "example1"
lt["2"] = 234
lt["foo"] = "Foo Example"

Luaから2番目のテーブルにアクセスできます

ThisTable[1] = ThisTable["foo"]
于 2013-01-22T13:59:33.023 に答える
0

user1829325は優れたアプローチを提供していますが、変更せずにコンパイルすることはできません。
lua.DoStringは配列を返しますが、lua.NewTableは何も返しません。

しかし、それは私を次の解決策に導きます。それは完全に実行されるので、とにかく+1します!

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

Luaから呼び出す必要のあるテーブルを返すAC#関数は、次のようになります。

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

上記の関数を使用して辞書を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;
}
于 2013-08-28T11:44:00.437 に答える
0

JCH2kは正しいです。NewTableにはリターンタイプがありません!

JCH2kロジックを使用して、この関数を作成してac#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]
于 2013-11-04T01:33:23.703 に答える