
MoonSharp是一个支持C#调用lua脚本的类库,支持.net,.net core,mono,unity,因此在.net core中也能够使用,而且加载和调用lua也很方便简单;
官网:http://www.moonsharp.org/
源码:https://github.com/xanathar/moonsharp
nuget:PM> Install-Package MoonSharp
使用 加载脚本
1 string scriptCode = @" 2 sum = 03 for i = 1,100 do4 sum = sum + i5 end6 return sum";7 DynValue res = Script.RunString(scriptCode); //运行脚本8 Console.Writeline(res.Number); //输出:5050
加载脚本文件:
Console.Writeline(Script.Runfile("luatest.txt").Number); //指定文件名加载脚本并运行
文件内容:
sum = 0for i = 1,100 do sum = sum + iend return sumVIEw Code
传递数据(lua全局变量)
1 string scriptCode = @" 2 function fact (n) 3 if (n == 0) then 4 return 1 5 else 6 return n*fact(n - 1) 7 end 8 end 9 return fact(num)"; 10 11 Script script = new Script();12 script.Globals["num"] = 5; //对脚本中的全局变量 num 赋值13 14 Console.Writeline(script.DoString(scriptCode).Number); //输出:120
lua函数的定义与调用
1 Script script = new Script(); 2 //先加载定义的函数 3 script.DoString(@" 4 function fact(n) 5 if (n == 0) then 6 return 1 7 else 8 return n * fact(n - 1) 9 end10 end11 ");12 13 //如果该函数会重复利用的,那么就应该这么调用,而不是每次都调用DoString加载脚本调用(每次都加载脚本是费性能的)14 Console.Writeline(script.Call(script.Globals["fact"],5).Number); //输出:12015 Console.Writeline(script.Call(script.Globals["fact"],DynValue.NewNumber(5)).Number); //和上面的一样传递集合参数
1 Script script = new Script(); 2 script.DoString(@" 3 function sum(List) 4 local total = 0; 5 for i,v in ipairs(List) do 6 total = total + v; 7 end 8 return total; 9 end10 ");11 12 Console.Writeline(script.Call(script.Globals["sum"],new List<int>() { 1,3,5,7,9 })); //输出:25多值返回:Tuple
1 Script script = new Script(); 2 script.DoString(@" 3 function sum(kv) 4 local total = 0; 5 local ks = ''; 6 for k,v in pairs(kv) do 7 total = total + v; 8 ks = ks .. k .. ','; --字符串拼接 9 end10 return ks,total; --多值返回:Tuple11 end12 ");13 14 var dict = new Dictionary<string,int>() //传递字典15 {16 { "k1",1 },17 { "k2",2 },18 { "k3",3 },19 };20 var tp = script.Call(script.Globals["sum"],dict).Tuple; //返回tuple类型21 Console.Writeline(tp[0].String); //输出:k1,k2,k3,22 Console.Writeline(tp[0].Number); //输出:0,如果是String类型的调用Number会输出:023 Console.Writeline(tp[1].Number); //输出:6
lua脚本中加载和调用C#代码定义的函数
1 public static voID CallList() 2 { 3 Script script = new Script(); 4 script.Globals["getList"] = (Func<List<int>,List<int>>)GetList; //加载C#中定义的函数 5 script.DoString(@" 6 function sum(List) 7 local total = 0; 8 for i,v in ipairs(List) do 9 total = total + v;10 end11 return total;12 end13 ");14 15 string scode = @"return sum(getList( { 11,12,13,14,15 } ))"; //脚本中调用C#中定义的函数16 Console.Writeline(script.DoString(scode)); //输出:12017 18 }19 20 private static List<int> GetList(List<int> List)21 {22 for (int i = 1; i <= 10; i++)23 List.Add(i);24 return List;25 }总结
以上是内存溢出为你收集整理的.net core中加载lua脚本的类库- MoonSharp全部内容,希望文章能够帮你解决.net core中加载lua脚本的类库- MoonSharp所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)