C# 对Lua脚本语言的理解,在程序中加入Lua脚本
最近看了一下脚本语言
对Lua很感兴趣
但是我又是一个新手 我甚至不知道Lua怎么和其他程序联系起来
我在网上搜索lua的作用 能干什么
回答全是诸如此类:
lua可以写脚本
可以运用到游戏开发
lua是ASCI C开发的 啥都支持它
但是这些信息对于我来说毫无用处
我想知道的是怎么干这些事情的
干这些事情的过程是怎么样的
我认为这样才是正确的 ,对新手友好的答案
在经过几个小时的思考后 我有了一个灵感
虽然我没用过python语言
但我听过他的大名 也被称之为胶水语言
那么我在思考的是 lua和python的相同之处
都是可以嵌入其他语言的语言
那么进行的过程是怎么样的呢
首先,你的设备上得有lua的语言环境,就是说得安装lua
第二,你的程序如果要加入lua程序,那么你的程序得有lua的解释器或者说是三方调用库 不然怎么可能在你的程序上跑lua呢
如我是C#开发者 ,电脑上有.net库
然后我现在集成lua程序进来
我在电脑上安装了lua的环境
那么 当我在C#里通过代码运行lua脚本的时候
lua脚本就会在电脑的lua环境进行解析执行
我的程序就可以通过此种方式扩展,让某些地方用lua来执行
因为lua很小很快,所以它可以帮助我们做很多事情
这样应该就算网上所说的强大之处
我们如何在代码里与lua进行交互操作
给个例子
using System;
using LuaInterface; //引用命名空间
namespace ChinarTest
{
/// <summary>
/// 测试类
/// </summary>
class Program
{
static void Main(string[] args)
{
Lua lua = new Lua(); //创建一个lua解释器
lua["num"] = 66; //用C#脚本在lua环境中,创建一个变量
lua["str"] = "chinar"; //用C#脚本在lua环境中,创建一个字符串变量
Console.WriteLine(lua["num"]); //输出
Console.WriteLine(lua["str"]); //输出
lua.DoString("num=666"); //用C#脚本在lua环境中,创建一段lua脚本:num=666
lua.DoString("str='chianr666'"); //用C#脚本在lua环境中,创建一段lua脚本:str='chianr666'
object[] values = lua.DoString("return num,str"); //用一个object数组 去接受返回值
foreach (var value in values) //遍历 values 数组中的元素
{
Console.WriteLine(value); //输出
}
lua.DoFile("Chinar.lua"); //加载lua文件 —— lua.DoFile(文件名)
Program program = new Program(); //声明一个对象
//lua.RegisterFunction 注册方法(注册到Lua中以后方法的名称,程序对象,程序的类型program.GetType().(传入C#中的方法名:需要是公有方法))
lua.RegisterFunction("LuaChinarTest", program, program.GetType().GetMethod("ChinarTest"));
//然后用lua.DoString(Lua中方法名())调用测试
lua.DoString("LuaChinarTest()");
//lua.RegisterFunction 注册静态方法(注册到Lua中以后方法的名称,空,程序的类型 typeof(Program).(传入C#中的方法名:需要是公有方法))
lua.RegisterFunction("LuaChinarStaticTest", null, typeof(Program).GetMethod("ChinarStaticTest"));
//然后用lua.DoString(Lua中静态方法名())调用测试
lua.DoString("LuaChinarStaticTest()");
lua.DoFile("ChinarClass.lua"); //Lua引用C#中的类
Console.ReadKey(); //等待输入
}
/// <summary>
/// 一个测试方法
/// </summary>
public void ChinarTest()
{
Console.WriteLine("这是一个空方法");
}
/// <summary>
/// 一个静态测试方法
/// </summary>
public static void ChinarStaticTest()
{
Console.WriteLine("这个一个静态空方法");
}
public int ChinarNum = 60; //整形变量
public string Name = "Chinar"; //字符串变量
/// <summary>
/// 用来让Lua脚本测试的方法
/// </summary>
public void ChinarTestFun()
{
Console.WriteLine("你好,Chinar");
}
/// <summary>
/// Ref方法,参数
/// </summary>
/// <param name="name"></param>
/// <param name="count"></param>
public void TestRef(string name, ref int count)
{
Console.WriteLine(name);
Console.WriteLine(count);
count = name.Length;
}
/// <summary>
/// Out方法,参数
/// </summary>
/// <param name="name"></param>
/// <param name="count"></param>
public void TestOut(string name, out int count)
{
Console.WriteLine(name);
count = name.Length;
}
}
}
写这么多只是为了让大家了解一下嵌入式是怎么来的,他的过程在我看来是这样的,如果有问题欢迎交流!