早前就用过LUA ,只是局部的小项目使用,忽然兴起想要写一些关于LUA 的 文章,记录曾经学习过的点点滴滴。javascript
这里我使用的是LUA5.2做为 案例html
lua作为轻量级脚本语言已经被普遍应用到应用软件以及游戏开发中,相比Perl以及python lua的内核 只有100KB左右前端
能够很容易嵌入到语言级别 就好像语言自己的功能同样java
如下来自百度全科:python
Lua还具备其它一些特性:同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它能够实现数组,哈希表,集合,对象;语言内置模式匹配;闭包(closure);函数也能够看作一个值;提供多线程(协同进程 [4] ,并不是操做系统所支持的线程)支持;经过闭包和table能够很方便地支持面向对象编程所须要的一些关键机制,好比数据抽象,虚函数,继承和重载等。linux
关于什么是闭包?以及如何使用闭包在下面这边文章中有 javascript对应的闭包问题。相信不少前端工程师并不陌生编程
闭包因为优缺点一直都是对半存在因此不少人是不建议程序中使用闭包的。windows
http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/17/1458405.html 关于闭包的介绍 数组
废话很少说,要使用LUA首先就要编译 LUA的内核,linux下至关简单 前端工程师
make
make install 就完事
windows下编译过程以下
若是你要编译静态库?
vs2010下首先建立以下 项目,记住去掉预编译头,由于lua是用C ,混合C/C++会形成预编译头冲突
建立不适用预编译头的 静态库 ,
导入lua代码到项目文件,选择你的lua代码导入 直接生成便可
若是你要编译动态库?
基本步骤同上相同 你在建立的时候建立一个dll项目 , 或者 直接修改项目属性 生成dll
你如今编译是编译不过的 ?你要去掉你的预编译选项!!! 不使用项目预编译头
这个时候你编译 OK经过了 也生成了 DLL ,那么问题来了 如今 咋没有生成.lib输入库呢!!!
实际上发现LUA内核导出函数都被声明为LUA_API开头
你须要添加几个预编译定义
LUA_BUILD_AS_DLL 这个告诉预处理器 代码按照DLL编译 而且定义导入导出
LUA_CORE 这个告诉预处理器 LUA_API 宏添加 上 dllexport导出定义 若是不添加就是直接使用dllimport
源代码以下
1 #if defined(LUA_BUILD_AS_DLL) /* { */ 2 3 #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ 4 #define LUA_API __declspec(dllexport) 5 #else /* }{ */ 6 #define LUA_API __declspec(dllimport) 7 #endif /* } */ 8 9 #else /* }{ */ 10 11 #define LUA_API extern 12 13 #endif /* } */
OK 到这里 你的LUA内核已经编译完了 能够开始学习LUA了