Как передать стол Луа с помощью C#
Как передать стол Луа с помощью C#
Я использую 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
так как я могу передать стол Луа?
1 ответ
Решение
Вы должны использовать то же самое 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;
}
}
}