C# 对Lua脚本语言的理解,在程序中加入Lua脚本

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;
        }
    }
}

写这么多只是为了让大家了解一下嵌入式是怎么来的,他的过程在我看来是这样的,如果有问题欢迎交流!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值