Lua笔记

  • 来源:开源中国

Lua由标准C编写而成。 Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。 Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。

魔兽世界采用的就是lua作为脚本语言。

Lua for Windows

http://luaforge.net/projects/luaforwindows/

SciTE保存为xxx.lua文件后才可以运行

LuaJava

http://luaforge.net/projects/luajava/

http://files.luaforge.net/releases/luajava/luajava

下载下来解压后包括两个文件(我下载的是1.1版本的): luajava-1.1.jar 文件和 luajava-1.1.dll动态连接库文件

luajava-1.1.jar就容易了,就是将其加入你的项目的ClassPath中,以便程序可以使用它提供的API

luaJava-1.1.dll就麻烦了,你必须将其加入你的Windows安装目录下,比如你用的是XP,安装在C盘,那就直接将其加入C:\WINDOWS目录下即可,当然你也可以将其加入你的JDK下的jre下

Lua基础语法

Lua最新版本为Lua 5.3.4。

一个全局变量没被赋值以前默认值为nil;给全局变量赋nil可以删除该变量。

lua是大小写敏感的。

单行注释:--

多行注释:--[[   --]]

全局变量arg存放lua的命令行参数。

local 声明局部变量。

lua是动态类型语言,变量不要类型定义。

lua标准库:string库、table库、I/O库、OS库、算术库、debug库。

lua中有8个基本类型:nil、boolean、number、string、userdata、function、thread、table,lua中没有整数。

函数type可以测试给定变量或者值的类型,eg:type("hello world")

lua中所有的值都可以作为条件,在控制结构的条件中除了false和nil为假,其他值都为真,所以lua认为0和空串都是真。

[[...]]也可以表示字符串,这种形式的字符串可以包含多行。

..在lua中是字符串的连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。

==和~=

c语言的三元运算符,在lua中这样实现:(a and b) or c

and和or的运算结果不是true和false,而是和它两个操作数的相关:

a and b 如果a为false,则返回a,否则返回b;

a or b 如果a为true,则返回a,否则返回b;

and的优先级比or高。

table元素索引从1开始:

一般初始化 {2,3}

list风格初始化{x=0,y=0}

reco风格初始化{["x"]=0,["y"]=0}

在构造函数中域分隔符逗号(","),可以用分号(";")替代,通常我们使用分号分割不同类型的表元素:

{x=0,y=45;"one","two","three"}

对多个变量进行赋值:a,b=10,2*x;     a,b=f()

控制结构语句

if conditions then

end;

while condition do

end;

repeat

until conditions;

for var=exp1,exp2,exp3 do

end

exp1初始值,exp2终止值,exp3(步长,可以省略,默认step=1)

泛型for循环

for k,v in ipairs(table) do print(v) end

ipairs只能用在key是数字的table

pairs可以用在key是字符串的table

函数

当函数只有一个参数并且这个参数是字符串或者表构造的时候,()可有可无。 eg: print "hello"

多返回值。eg:

方法里return s,e

s,e=string.find("hello lua users","lua");print(s,e)

lua接受可变数目的参数,函数的参数放在arg表中,arg表中还有一个域n表示参数的个数。

function print(...)

    for i,v in ipairs(arg) do

    end

end

function g(a,b,...) end

g(3,4,5,8)    a=3,b=4,arg={5,8;n=2}

高级函数、闭包、非全局函数、尾调用(是一种类似在函数结尾的goto调用)

loadfile、loadstring

dofile、 require

assert、error、debug.debug、debug.traceback

协同程序(三态:挂起、运行、停止)

lua所有的协同函数在coroutine table中

tread=coroutine.create(function)

coroutine.status()

coroutine.resume()

coroutine.yeild()

LuaSocket库

function test()

    ....

end