lua学习记录

1.八种数据类型:number,string,boolean,nil,function,table,协程,自定义类型

空字符串和数字0是真,false和nil为假

2.lua是动态语言,每个变量携带自己的类型,可以运行时类型转换,print(type(my_var))得到类型

3.不格式化的字符串:print([[aa]]);print([==[[a]]==]),注释也可以用--[==[和--]==]

4.tonumber,tostring,#得到字符串长度

5.理解数组:a={x=10, y=45; "one", "tow", "three"}

for i,v in pairs(a) do print(i,v) end

6.local foo1 = foo1 局部变量拷贝自全局变量

7.常用的控制流程:if_else_then,while_do_end,repeat_until,for_do_end

8.函数的参数如果是字符串或者数字,圆括号可有可无

9.lua提供了冒号操作符模仿面向对象的调用:string.byte(data,i)等价于data:byte(i)前提是type(data)是string

这是lua提供的语法糖,function的写法也是一种语法糖,使得代码看起来像pascal

10.闭包的例子

function Create(n)
   local function foo1()
      print(n)
   end

   local function foo2()
      n = n + 10
   end

   return foo1,foo2
end
f1,f2 = Create(1979)
f1() -- 打印1979
f2()
f1() -- 打印1989
f2()
f1() -- 打印1999

上面代码来自:http://www.cnblogs.com/effort-rookie/archive/2012/10/10/2718023.html

闭包:就是函数加上‘局部变量’的控制块,理解局部变量的生存周期;闭包可对应设计模式的工厂模式;

函数是编译时(静态),闭包是运行时(动态);对象是附有行为的数据,而闭包是附有数据的行为

11.当函数最后一个动作是调用另外一个函数时,我们称这种调用尾调用,相当于goto所以不需要额外的堆栈空间

12.package.loadlib: 从dll或者so引用函数;lua-5.3去掉了package.seeall

13.require先从环境变量找*.lua,再找库*.dll(或*.so),如果是库就用package.loadlib加载