如何使用 C# 将 table 传递给 lua
How to pass a table to lua with c#
如何使用 c#
将 table 传递给 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是函数类型而不是table类型。像这样:
Start
function
end
那么如何将 table 传递给 lua?
您需要在 Program 和 CShaprFunction 中使用相同的 Lua
对象才能正常工作,因为它在 lua 环境中创建 Lua table而且您不能直接将 Lua table 移动到不同的环境。
这是一个生成的示例:
Start
table
end
我使用了 NLua,LuaInterface 的继任者仍在更新中,因为我在使用 LuaInterface 时遇到了问题,但它在 Lua 中应该是一样的接口。
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;
}
}
}
如何使用 c#
将 table 传递给 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是函数类型而不是table类型。像这样:
Start
function
end
那么如何将 table 传递给 lua?
您需要在 Program 和 CShaprFunction 中使用相同的 Lua
对象才能正常工作,因为它在 lua 环境中创建 Lua table而且您不能直接将 Lua table 移动到不同的环境。
这是一个生成的示例:
Start
table
end
我使用了 NLua,LuaInterface 的继任者仍在更新中,因为我在使用 LuaInterface 时遇到了问题,但它在 Lua 中应该是一样的接口。
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;
}
}
}