首页 > 其他 > 详细

Lua学习笔记1

时间:2014-03-28 23:23:15      阅读:530      评论:0      收藏:0      [点我收藏+]

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

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

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中都可以有一个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是区分大小写的。

 

Lua学习笔记1,布布扣,bubuko.com

Lua学习笔记1

原文:http://www.cnblogs.com/shihui142857/p/3133306.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!