编译并使用Lua语言

Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。html

  1. 可扩展性。Lua的扩展性很是卓越,能够经过Lua代码或C代码扩展,不少功能能够经过外部库来扩展。
  2. 简单。Lua自己简单,小巧,但功能强大,易于学习。
  3. 高效率。Lua有很高的执行效率,是目前平均效率最高的脚本语言。
  4. 平台无关。Lua几乎能够运行在全部系统上,经过彻底使用ANSI C来编写的,只要有ANSI C编译器就能够编译并使用Lua。
  5. 其它特性:同时支持面向过程和函数式编程;自动内存管理;只提供一种通用类型的表table,用它能够实现数组、哈希表、集合、对象;语言内置模式匹配;闭包;函数也能够看作一个值;提供多线程支持,并不是操做系统中的线程;经过闭包和table能够方便地支持面向对象所须要的一些关键机制,如数据抽象、虚函数、继承、重载等。

那么为何要学习Lua语言了?仅仅上面这些优势是不够的,通常来讲,Lua主要用于游戏开发中,性能不错,也能够看成配置文件。而对于性能要求不高的应用,强大的Python是更好的选择。git

要学习Lua,天然离不开实践,我是在Win8下用VS2013来编译Lua源代码的,编译完成后能够获得一个Lua解释器,能够直接运行咱们的脚本。先去官网下载Lua源代码,而后用Visual Studio建立一个C++控制台解决方案,默认不包含代码。接着把src文件夹复制到项目目录下,在VS中添加所需代码。咱们一共须要建立3个项目,Lua5.2项目做为静态库,生成Lib文件;Lua项目做为解释器,引用Lua5.2项目,生成exe文件;Luac做为编译器,引用Lua5.2项目。src文件夹中,lua.c文件不要添加到库Lua5.2中,要单独添加到Lua中;luac.c文件则添加到Luac项目中。须要注意的是,在编译为lib文件时,须要作以下配置:C/C++   -->  高级  -->  编译为  -->  选择“编译为C++代码(/TP)”,不然使用lua  lib库的时候会报连接错误。不知道怎么弄的能够直接下载我提供的Lua工程代码,点击下载。弄好后,获得Lua.exe,Luac.exe和Lua5.2.lib文件,咱们把这些文件放入一个Lua文件夹中,加入到系统环境变量Path中能够直接在CMD下使用。github

那么用什么代码编辑器了?这里推荐使用sublime,加上插件确实方便,https://github.com/leitwolf/LuaTools。不过代码提示不够好,使用io函数时会报错,我也不知道用什么好,随意吧。好了,若是你把lua.exe加入到了环境变量中,就能够在Windows下直接运行Lua命令来启动解释器了。输入print('hello')就能够获得输出结果,但你确定不想这么写程序,因此仍是用编辑器建立一个.lua文件比较好,而后在CMD中输入命令lua file.lua就能够获得运行结果了。下面总结一下这些经常使用的命令格式。编程

在CMD模式下,就是没有直接运行lua.exe的状况下,格式以下,前面的是命令,后面是注释:数组

lua options script args;
lua -e "print('hello')", to execute code;
lua -i -llib, to load lib library;
lua -e "a=1" a b c, so arg[0] = "a", arg[1] = "b",
arg [-1] = "a=1", arg[-2] = "-e", arg[-3] = "lua";多线程

在运行了Lua.exe的交互模式下,格式以下:闭包

=4*3, as a calculator;
os.exit(), to exit the console;
dofile("test.lua"), to execute and load function;
use "do ... end" for a complete chunk编辑器

下面咱们建立一个test.lua测试文件,一个简单的函数:函数式编程

function fact(n) if n < 0 then
        return nil
    elseif n == 0 then
        return 1
    else
        return n * fact(n-1) end
end

print(fact(-4)) print("filename: " .. arg[0] .. "\n")

 

function表示函数,后面是函数名和参数。能够看到,语句之间不须要分隔符,但你使用;并无错。if语句和函数以end做为结尾,也不须要指定返回值类型。函数

Lua是一个自由格式的语言,变量名能够由任意字符构成,但不能以数字开头,也不能是经常使用的关键字。Lua是区分大小写的。经常使用的关键字有:and, or, not, if, else, elseif, then, end, true, false, nil, goto, function, for, do, while, until, break, return, in, local, repeat。

 

Lua是动态脚本语言,这意味着“变量”没有类型,只有“值”有类型。语言中不存在类型定义,全部的值拥有自身类型。Lua中的八种基础数据类型,能够用type函数查看类型:

  1. nil :表示值为空。
  2. boolean :nil类型的值和false都表示false,其它值表示true。
  3. number :数字类型。
  4. string :不可变的字节序列,可包含任何8-bit值,包括'\0'。
  5. function :调用由Lua或C写的函数。
  6. userdata : 指向一块内存的指针,用于存储C语言类型数据。有两种userdata,full userdata的内存由Lua管理,light userdata的内存由宿主语言管理。对于userdata,没有预约义的操做,经过使用metatables(元表),能够为full userdata定义相关数据操做。不能在Lua中修改和建立userdata类型的值,仅仅能够用C API修改。
  7. thread :Lua中的coroutine(协程),在不支持多线程的系统中也可使用。
  8. table :用于实现数组,包含key和value,key不能够是nil和NaN,value能够包含全部类型数据,但value不能够是nil。即不存在的key的value为nil。

Tables,functions,threads,full userdata的value都是objects(变量并不包含值,只是这些值的引用)。

关于Lua的学习,推荐Programming in Lua第三版这本书,英文的,不懂的能够对照第二版中文的看。本觉得Lua的知识不多,写点东西就没了,但学完后才发现太多了,因此就不继续了。

推荐一个学习项目,https://github.com/xfbs/PiL3;还有这篇博文

http://www.cnblogs.com/stephen-liu74/archive/2012/06/13/2407507.html

相关文章
相关标签/搜索