gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:26:36 27 4
gpt4 key购买 nike

如何用c#传递一个表给lua

我用的是LuaInterface,这是我的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?

最佳答案

您需要在 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;
}
}
}

关于c# - 如何使用 C# 将表传递给 lua,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27955440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com