Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开
赋值语句右边的值会依次赋给左边的变量
a,b = 1,2
赋值语句会先计算右边所有的值然后再执行赋值操作
x = 1;y = 2
x, y = y, x
变量个数>值的个数 按变量个数补足 nil 变量个数<值的个数 多余的值会被忽略
a, b, c = 0 //0 nil nil 不是想象中的 0 0 0
使用 local 创建一个局部变量,局部变量只在被声明的那个代码块内有效。
代码块:指一个控制结构,一个函数体,或者一个chunk (do..end 内的部分)
应该尽可能的使用局部变量:
1. 避免命名冲突
2. 访问局部变量的速度比全局变量更快.
控制结构的条件表达式结果可以是任何值,Lua 认为 false 和 nil 为假,其他值为真。
函数语法:
function func_name (arguments-list)
statements-list;
end;
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。
当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()是可选的
print "message"
type "message"
Lua 函数可以返回多个值 如下例返回字符串匹配开始与结束下标
startPoint, endPoint = string.find("hello Lua users", "Lua")
Lua 会首先把代码预编译成中间码然后再执行
解释型语言的特征不在于他们是否被编译,而是编译器是语言运行时的一部分
函数 dofile 的存在就是说明可以将 Lua作为一种解释型语言被调用。
dofile实际上是一个辅助的函数。真正完成功能的函数是 loadfile
loadfile编译代码成中间码并且返回编译后的 chunk 作为一个函数,而不执行代码
loadstring 与 loadfile 相似,只不过它不是从文件里读入 chunk,而是从一个串中读入。
函数:
Lua 中的函数是带有词法定界(lexical scoping)的第一类值(first-class values)。
第一类值指:在 Lua 中函数和其他值一样可以被存放在变量中,也可以存放在表中,可以作为函数的参数,还可以作为函数的返回值。
词法定界指:嵌套的函数可以访问他外部函数中的变量。
function func_name (arguments-list)
statements-list;
end;
调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。
当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()可有可无。
Lua 函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用 nil 补足。
Lua 函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua 将函数参数放在一个叫 arg 的表中,除了参数以外,arg 表中还有一个域 n 表示参数的个数。
命名参数:
Lua 的函数参数是和位置相关的,调用时实参会按顺序依次传给形参。
Lua 可以通过将所有的参数放在一个表中,把表作为函数的唯一参数来实现上面这段伪代码的功能。
Lua 中关于函数稍微难以理解的是函数也可以没有名字。
我们所说的函数 就是指向函数的变量
迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
Lua 会首先把代码预编译成中间码然后再执行
table 是 Lua 中唯一的数据结构,其他语言所提供的数据结构
如:arrays、records、 lists、queues、sets 等,Lua 都是通过 table 来实现。
lua 中通过整数下标访问 table 中元素,即是数组。并且数组大小不固定,可动态增长。
习惯上,Lua 的下标从 1 开始。(主要是为了使用标准库中的函数)
array = {}
for i = 1 , 1000 do array[i] = i end
print(array[128]) --128
可以用构造器在创建数组的同时初始化数组:
array = {9,8,7,6,5,4,3,2,1,0}
Lua 中有两种表示矩阵的方法,一是“数组的数组”。table 的每个元素是另一个 table。
matrix = {}
for i = 1,9 do
matrix[i] = {}
for j = 1,9 do
matrix[i][j] = i*j
end
end
result = coroutine.create(function() print "Hello Dariion" end)
print(result)
print(coroutine.status(result))
print(coroutine.resume(result))
I/O 库为文件操作提供两种模式。
简单模式拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。
完全模式使用外部的文件句柄来实现。
它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法。
简单模式的所有操作都是在两个当前文件之上。
I/O 库将当前输入文件作为标准输 入(stdin),将当前输出文件作为标准输出(stdout)。