.net core中加载lua脚本的类库- MoonSharp
来源:互联网 发布:淘宝网百丽女鞋 编辑:程序博客网 时间:2024/06/05 07:54
前言
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 sum
传递数据(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 }
0 0
- .net core中加载lua脚本的类库- MoonSharp
- .net core中加载lua脚本的类库- MoonSharp
- .net core中加载lua脚本的类库- MoonSharp
- .net core中加载lua脚本的类库- MoonSharp
- .net core中加载lua脚本的类库- MoonSharp
- .net core中加载lua脚本的类库- MoonSharp
- C++调用的LUA脚本中加载其他库的问题
- lua脚本加载问题
- [Lua脚本实践3]LuaPlus中类成员的调用
- lua脚本调用cocos2dx项目中自定义的C++类
- 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库
- iOS 中 Lua 脚本的应用
- Cocos2d-x中Lua脚本的加密
- openWRT中lua脚本的星号问题
- 在Lua中使用自定义精灵(Lua脚本与自创建类之间的访问)及Lua基础讲解
- .net core中有哪些被抛弃的类
- 界面库中使用lua脚本
- net core中Session的使用
- Swift3.0 -- didSet(OC中重写setter方法)
- ZOJ - 3487 Ordinal Numbers
- Python小试牛刀之三
- 建造者模式
- 泛型的优点
- .net core中加载lua脚本的类库- MoonSharp
- 机器学习实战笔记_09_树回归_代码错误修正
- poj2291
- 用C/C++进行注释转化
- Solr学习笔记 --- Solr查询页面参数
- Spring框架标签
- 代码实现数据库连接池
- IO流_String类中的编码和解码问题
- conda报错:'Could not connect to https://repo.continuum.io/pkgs/pro/linux-64'解决方法