【问题标题】:How to pass a table to lua with c#如何使用 c# 将表传递给 lua
【发布时间】:2015-03-13 08:59:12
【问题描述】:

如何使用 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代码:

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

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

Start
function
end

那么如何将表传递给 lua?

【问题讨论】:

    标签: c# lua lua-table luainterface nlua


    【解决方案1】:

    您需要在 Program 和 CShaprFunction 中使用相同的 Lua 对象才能正常工作,因为它正在 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;
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2012-11-08
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2019-03-23
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多