序言
无
文本格式 格式1我们可以将 Lua 程序代码保存到一个以 lua 结尾的文件,并执行,该模式称为脚本式编程,如我们将如下代码存储在名为 hello.lua 的脚本文件中:
print("Hello World!")
print("www.runoob.com")
#执行该文件并显示结果
$ lua hello.lua
Hello World!
www.runoob.com
格式2
我们也可以将代码修改为如下形式来执行脚本(在开头添加:#!/usr/local/bin/lua):并为文件增加执行权限,跟shell一样的.cuiyaonan2000@163.com
#!/usr/local/bin/lua
print("Hello World!")
print("www.runoob.com")
#执行并显示结果
./hello.lua
Hello World!
www.runoob.com
注释
单行注释
两个减号是单行注释:
--
多行注释
--[[
多行注释
多行注释
--]]
变量名
跟java差不多.
- 最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的 。
- _加大写字母都是Lua的全局变量
以下列出了 Lua 的保留关键词。保留关键字不能作为常量或变量或其他用户自定义标示符:关键字很少,还有很多逻辑判断的,所以很容易掌握cuiyaonan2000@163.com
在默认情况下,变量总是认为是全局的。
全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil。
> print(b)
nil
> b=10
> print(b)
10
>
如果你想删除一个全局变量,只需要将变量赋值为nil。
b = nil
print(b) --> nil
局部变量
Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。----即只有使用local的才是局部变量cuiyaonan2000@163.com
应该尽可能的使用局部变量,有两个好处:
- 1. 避免命名冲突。
- 2. 访问局部变量的速度比全局变量更快。
赋值是改变一个变量的值和改变表域的最基本的方法。
a = "hello" .. "world"
t.n = t.n + 1
Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
a, b = 10, 2*x a=10; b=2*x
遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:
x, y = y, x -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i] -- swap 'a[i]' for 'a[j]'
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略
多值赋值经常用来交换变量,或将函数调用返回给变量:
f()返回两个值,第一个赋给a,第二个赋给b。
a, b = f()
循环控制语句
控制语句描述break 语句退出当前循环或语句,并开始脚本执行紧接着的语句。goto 语句将程序的控制点转移到一个标签处。
while循环
while( true )
do
print("循环将永远执行下去")
end
for循环
#var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。
for var=exp1,exp2,exp3 do
end
用例:
#!/usr/local/bin/lua
function f(x)
print("function")
return x*2
end
for i=1,f(5) do print(i)
end
结果:
function
1
2
3
4
5
6
7
8
9
10
注释:for的三个表达式在循环开始前一次性求值,以后不再进行求值。比如上面的f(x)只会在循环开始前执行一次,其结果用在后面的循环中。
泛型for循环
i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。
--打印数组a的所有值
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print(i, v)
end
流程控制
--[ 0 为 true ]
if(0)
then
print("0 为 true")
end
if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
if( 布尔表达式 1)
then
--[ 布尔表达式 1 为 true 时执行该语句块 --]
if(布尔表达式 2)
then
--[ 布尔表达式 2 为 true 时执行该语句块 --]
end
end
一些常用的函数
函数名说明print 日志打印输出.如:print('输出内容')
tonumber将字符串转换为数字,如:tonumber('1')type 输出变量类型,如 type(变量名)