lua对于大型程序块和大型字符串的处理不会有任何问题. 几兆字节的程序块,大到容纳一本书的字符串均可以正确处理.java
默认的函数递归层次在16000层左右,仅仅只是简单的函数调用,没有任何的处理逻辑或者局部变量声明. 可是嵌套层次也已经足够多了,只要不是太胡来,基本不用担忧.c++
哑变量_,自己也是变量,是要占用内存的,能够输出哑变量的值,像这样print(_). 功能基本相似于匿名变量,好处在于不须要为不须要的变量起一个有意义的名字. 接收函数多重返回值的时候,很是有用.数组
加载其余lua文件,可使用dofile或者loadfile,参数是lua文件的path字符串.函数
dofile加载即执行,loadfile须要显示调用才会执行.ui
require加载lua模块.lua
全部传给lua脚本的参数,都会被保存到名为arg的table中,下标为0的索引的值是lua脚本文件名.对象
lua中的类型递归
lua是动态类型的语言,变量自己没有类型,每一个值都携带了自身的类型信息.索引
type能够返回当前值的类型的字符串表示.ip
lua没有整型值,由于双精度浮点型足以精确表示整型数值,不会出现"四舍五入"的错误.
tonumber和tostring,两个很是实用的函数.字符串转换成数值可能会引起异常(若是是非数值型字符串)
lua中#放在数组的前面,能够返回数组的长度,实际上是最后一个元素的索引.
没有空隙的数组能够用#操做符获取当前数组的长度.
若是是有空隙的数组,能够调用table.maxn来返回当前线性表的最大正向索引数.
for,break,return
数值型的for循环,三个表达式的值,是循环开始前一次性求值的,表达式中的函数调用只会执行一次. 这一点和java,c++等其余语言的for循环不一样. 全部的循环变量,都是在for循环内部局部可见.
泛型for,ipairs用于遍历数组,pairs用于遍历table,io.lines用于遍历文件中的每一行. string.gmatch用于遍历字符串中的单词.
break和return只能是一个块的最后一条语句,不过能够在任意位置用do end把return包起来, 就能够避免lua解释器的检查.
lua中的函数
lua中的函数,本质就是一个普通的变量,能够像普通变量同样赋值或者改变函数的行为.
若是table对象做为参数,lua会引用外部的table对象进行函数内部的处理.
lua中的对象还有userdata,function类型的实体等.
普通变量,仍然是赋值拷贝.
可变参数,在函数内部能够用ipairs遍历全部的参数.
select('#',...)返回可变参数的个数,参数中可能有nil值,不用用泛型for来遍历, 能够用select获取可变参数的个数,而后是数值for循环来遍历.
参数过多的时候,能够把相关的参数收集到一个table里面,控制参数的个数.