4

如何使用 c# 将表传递给 lua

我正在使用 Lua 接口,这是我的 c# 代码

  using System;
  using System.IO;
  using System.Text;
  using LuaInterface;

  namespace GetLuaTable
  {
      class Program
      {
          static void Main(string[] args)
          {

              Lua netLua = new Lua();

              CShaprFunction cShapr = new CShaprFunction();
              netLua.RegisterFunction("CShaprConsoleLine", cShapr, cShapr.GetType().GetMethod("CShaprConsoleLine"));
              netLua.RegisterFunction("CSharpGetTableFromStr", cShapr, cShapr.GetType().GetMethod("CSharpGetTableFromStr"));
              netLua.DoFile("MyLua.lua");
              netLua.GetFunction("main").Call();
              Console.ReadKey();
          }
      }
      class CShaprFunction
      {
          public void CShaprConsoleLine(object obj)
          {
              Console.WriteLine(obj);
          }
          public LuaTable CSharpGetTableFromStr(string name)
          {
              Lua lua = new Lua();
              lua.DoString("a={\"test\"}");
              LuaTable tab = lua.GetTable(name);
              return tab;
          }
      } 
  }

这是lua代码:</p>

  function main()
    CShaprConsoleLine("Start")
    local tmptable = CSharpGetTableFromStr("a")
    CShaprConsoleLine(type(tmptable))  
    CShaprConsoleLine("end")
  end

但是我得到了结果,tmptable 是函数类型而不是表类型。像这样:

Start
function
end

那么如何将表格传递给lua?

4

1 回答 1

2

您需要Lua在 Program 和 CShaprFunction 中使用相同的对象才能正常工作,因为它正在 lua 环境中创建 Lua 表,您不能直接将 Lua 表移动到不同的环境。

这是一个产生的示例:

Start
table
end

我使用了 NLua,LuaInterface 的继任者仍在更新,因为我在使用 LuaInterface 时遇到了问题,但它在 LuaInterface 中应该可以正常工作。

using System;
using System.IO;
using System.Text;
using NLua;

namespace GetLuaTable
{
    class Program
    {
        public static Lua netLua;

        static void Main(string[] args)
        {

            netLua = new Lua();

            CShaprFunction cShapr = new CShaprFunction();
            netLua.RegisterFunction("CShaprConsoleLine", cShapr, cShapr.GetType().GetMethod("CShaprConsoleLine"));
            netLua.RegisterFunction("CSharpGetTableFromStr", cShapr, cShapr.GetType().GetMethod("CSharpGetTableFromStr"));
            netLua.DoString(@"
            function main()
                CShaprConsoleLine(""Start"")
                local tmptable = CSharpGetTableFromStr(""a"")
                CShaprConsoleLine(type(tmptable))  
                CShaprConsoleLine(""end"")
              end
            ");
            netLua.GetFunction("main").Call();
            Console.ReadKey();
        }
    }
    class CShaprFunction
    {
        public void CShaprConsoleLine(object obj)
        {
            Console.WriteLine(obj);
        }
        public LuaTable CSharpGetTableFromStr(string name)
        {
            var lua = Program.netLua;
            lua.DoString("a={\"test\"}");
            LuaTable tab = lua.GetTable(name);
            return tab;
        }
    }
}
于 2015-01-15T22:15:20.170 回答