lua要点

数据类型

八种基本类型:
数值(number):内部以double表示
字符串(string):总是以零结尾,但可以包含任意字符(包括零),因此并不等价于C字符串,而是其超集。
布尔(boolean):只有“true”或者“false”两个值。
函数(function):Lua的关键概念之一。不简单等同于C的函数或函数指针。
表(table):异构的Hash表。Lua的关键概念之一。
userdata :用户(非脚本用户)定义的C数据结构。脚本用户只能使用它,不能定义

线程(thread) :Lua协作线程(coroutine),与一般操作系统的抢占式线程不一样。
nil :代表什么也没有,可以与C的NULL作类比,但它不是空指针
 
函数

 

function foo(a, b, c)
local sum = a + b
return sum, c  --函数可以返回多个值
end
r1, r2 =foo(1, '123', 'hello') --平行赋值
print(r1, r2)
输出结果:
124 hello

 

用关键字local定义。如果没有用local定义,即使在函数内部定义的变量也
是全局变量!
  

 

 

 

访问表的成员
通过“.”或者“[]”运算符来访问表的成员。
注意:表达式a.b等价于a[“b”],但不等价于a[b] 

 

表项的键和值
任何类型的变量,除了nil,都可以做为表项的键。从简单的数值、字符串
到复杂的函数、表等等都可以;同样,任何类型的变量,除了nil,都可以
作为表项的值。给一个表项的值赋nil意味着从表中删除这一项,比如令a.b
= nil,则把表a中键为“b”的项删除。如果访问一个不存在的表项,其值
也是nil,比如有c = a.b,但表a中没有键为“b”的项,则c等于nil.

 

 

 

 

深入lua的函数

lua中的函数---函数闭包(函数的超集,由函数定义和upvalue组成函数闭包 ) 带状态的函数  和对象类似

 

 

 

 

Upvalue
一个函数所使用的定义在它的函数体之外的局部变量(external local variable)称为这个函数的upvalue。ms就是countDown的upvalue

 

闭包其实和类的概念相识,都是数据和方法的封装

 

  • lua中的函数是 第一类值 和其他(数值,布尔)一样。 可以轻易的重新定义函数的引用

 

  • 可以在创建闭包的时候,动态的给upvalue复制,如下createCountdownTimer创建了有不同upvalue的闭包 。(同理 lua能够动态的创建不同的闭包函数 )

 

  • 一个函数内可以定义两个闭包公用一个upvalue实现数据共享。 (如下f1,和f2共享一个upvalue)

 

 

lua函数:尾调用消除,最后一个函数调用  没有栈调用消耗

 

简单的面相对象的实现

 

 

输出结果:
o1's name: Sam o1's id: 1
o1's name: Lucy o1's id: 100

 

 

对象工厂模式
如前面代码的create函数
用表来表示对象
把对象的数据和方法都放在一张表内,虽然没有隐藏私有成员,但对于简单
脚本来说完全可以接受。
成员方法的定义
function obj:method(a1, a2, ...) … end 等价于
function obj.method(self, a1, a2, ...) … end 等价于
obj.method = function (self, a1, a2, ...) … end
成员方法的调用
obj:method(a1, a2, …) 等价于
obj.method(obj, a1, a2, ...)

lua其他的重要概念

lua的元表,lua函数环境 ,lua包, lua的协程

posted on 2013-10-27 20:56  lawnight  阅读(243)  评论(0)    收藏  举报

导航