Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua是动态脚本语言,这意味着“变量”没有类型,只有“值”有类型。语言中不存在类型定义,所有的值拥有自身类型。Lua中的八种基础数据类型,可以用type函数查看类型:
Tables,functions,threads,full userdata的value都是objects(变量并不包含值,只是这些值的引用)。
任何值在Lua中都可以有一个metatable,这个元表就是普通的table,用于定义对该值的操作行为。例如,如果对非数字进行加法add操作,Lua将在该值的metatable中查找“_add”函数并调用。可以用getmetatable方法查找任意值的metatable,可以用方法setmetatable改变table的metatable,要改变其它类型的值的metatable,只能使用C的API。Tables和full
userdata有各自独立的metatable,其它类型的值各自拥有单个的metatable。关于值的操作,有add,sub,mul,div,mod,pow,unm,concat,len,eq,lt,le,index,newindex,call这些方法,在metatable中的key对应的是“_add”,“_sub”...等,而Value就是对应的函数,其中key称为event,而value称为metamethod。
Lua支持Coroutines,也叫做协程。一个Coroutine代表一个独立的线程执行。可以使用coroutine.create来创建,用coroutine.resume来执行。协程执行后会一直运行,直到被终止或者遇到yield语句。当一个Coroutine遇到coroutine.yield语句,对应的coroutine.resume将立即返回true。当你下一次对该Coroutine调用coroutine.resume时,它将继续从yield语句后执行。创建一个协程还有一个方法,使用coroutine.wrap,与coroutine.create不同的是,它并不返回自身,它返回一个function,调用这个function时才返回coroutine。这个函数被调用时,不会返回错误代码,错误信息交由调用者处理。
Lua是一个自由格式的语言,Names可以由任意字符构成,但不能以数字开头,也不能是常用的关键字。Lua是区分大小写的。
原文:http://www.cnblogs.com/shihui142857/p/3133306.html