Core2.X+Lua
背景
当你需要Core2.X+Lua的时候,就可以往下看了…
MoonSharp
其实moonsharp(Lua5.2环境)的测评和性能不高,但是如果仅仅是能用的要求…就可以继续往下看
MoonSharp Build Status Build Status
http://www.moonsharp.org
A complete Lua solution written entirely in C# for the .NET, Mono, Xamarin and Unity3D platforms.
Features:
99% compatible with Lua 5.2 (with the only unsupported feature being weak tables support)
Support for metalua style anonymous functions (lambda-style)
Easy to use API
Debugger support for Visual Studio Code (PCL targets not supported)
Remote debugger accessible with a web browser and Flash (PCL targets not supported)
Runs on .NET 3.5, .NET 4.x, .NET Core, Mono, Xamarin and Unity3D
Runs on Ahead-of-time platforms like iOS
Runs on IL2CPP converted code
Runs on platforms requiring a .NET 4.x portable class library (e.g. Windows Phone)
No external dependencies, implemented in as few targets as possible
Easy and performant interop with CLR objects, with runtime code generation where supported
Interop with methods, extension methods, overloads, fields, properties and indexers supported
Support for the complete Lua standard library with very few exceptions (mostly located on the 'debug' module) and a few extensions (in the string library, mostly)
Async methods for .NET 4.x targets
Supports dumping/loading bytecode for obfuscation and quicker parsing at runtime
An embedded JSON parser (with no dependencies) to convert between JSON and Lua tables
Easy opt-out of Lua standard library modules to sandbox what scripts can access
Easy to use error handling (script errors are exceptions)
Support for coroutines, including invocation of coroutines as C# iterators
REPL interpreter, plus facilities to easily implement your own REPL in few lines of code
Complete XML help, and walkthroughs on http://www.moonsharp.org
For highlights on differences between MoonSharp and standard Lua, see http://www.moonsharp.org/moonluadifferences.html
Please see http://www.moonsharp.org for downloads, infos, tutorials, etc.
License
The program and libraries are released under a 3-clause BSD license - see the license section.
Parts of the string library are based on the KopiLua project (https://github.com/NLua/KopiLua). Debugger icons are from the Eclipse project (https://www.eclipse.org/).
Usage
Use of the library is easy as:
double MoonSharpFactorial()
{
string script = @"
-- defines a factorial function
function fact (n)
if (n == 0) then
return 1
else
return n*fact(n - 1)
end
end
return fact(5)";
DynValue res = Script.RunString(script);
return res.Number;
}
For more in-depth tutorials, samples, etc. please refer to http://www.moonsharp.org/getting_started.html
我的实现
我使用了core-mvc+moonsharp,核心代码:
DemoController.cs
using Microsoft.AspNetCore.Mvc;
using MoonSharp.Interpreter;
using System;
namespace MyCore.Controllers
{
[Route("api/demo")]
[ApiController]
public class DemoController : Controller
{
[Route("test")]
public string Test(string test)
{
return "Test:" + test;
}
[Route("getlua")]
public string GetLua()
{
Console.WriteLine("GetLua...");
Script script = new Script();
script.DoString(@"
function test(a)
return a*3
end
");
DynValue luaFunction = script.Globals.Get("test");
DynValue res = script.Call(luaFunction,5);
return "GetLua:"+res.Number;
}
}
}
我的效果
浏览器访问localhost:5000/api/demo/getlua