Lua 基本语法
print("Hello World!")
-- 单行注释
--[[
多行注释
--]]
---[[
print('取消多行注释')
--]]
--[ 定义变量 --]
- 多行注释推荐使用 --[=[注释内容]=],这样可以避免遇到table[table[idx]]时就将多行注释结束了。
- 最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。
- 在默认情况下,变量总是认为是全局的。
Lua 数据类型
- Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。
nil(空)
- nil = 空。
- nil 作比较时应该加上双引号 type(X)=="nil"
boolean(布尔)
- Lua 把 false 和 nil 看作是"假",其他的都为"真"。
number(数字)
- Lua 默认只有一种 number 类型 -- double(双精度)类型。
string(字符串)
- 字符串由一对双引号或单引号来表示。
- 也可以用 2 个方括号 "[[]]" 来表示"一块"字符串。
html = [[
菜鸟
学习
]]
print(html)
- 在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字。
-字符串连接使用的是 ..
> print("a" .. 'b')
ab
- 使用 # 来计算字符串的长度,放在字符串前面.
> len = "www.runoob.com"
> print(#len)
14
table(表)
- 在 Lua 里表的默认初始索引一般以 1 开始。
function(函数)
- function 可以以匿名函数(anonymous function)的方式通过参数传递。
thread(线程)
- 线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
userdata(自定义类型)
- 可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
Lua 变量
- Lua 变量有三种类型:全局变量、局部变量、表中的域。
- 用 local 显式声明为局部变量,局部变量的作用域为从声明位置开始到所在语句块结束。
赋值语句
- 赋值语句右边的值会依次赋给左边的变量,遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,可以这样进行交换变量的值。
x, y = y, x -- swap 'x' for 'y'
- 应该尽可能的使用局部变量,有两个好处:
- 避免命名冲突;
- 访问局部变量的速度比全局变量更快。
索引
- 对 table 的索引使用方括号 []。Lua 也提供了 . 操作。
t[i]
t.i -- 当索引为字符串类型时的一种简化写法
Lua 循环
-
while循环
while(condition)
do
statements
end
-
for 循环
1. 数值for循环
for var=exp1,exp2,exp3 do
<执行体>
end
-- var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 "执行体"。exp3 是可选的,如果不指定,默认为1。
2. 泛型for循环
--打印数组a的所有值
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print(i, v)
end
-- i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。
pairs 能迭代所有键值对
。
ipairs 可以想象成 int+pairs,只会迭代键为数字的键值对。
-
repeat...until 循环
repeat
statements
until( condition )
-- 在条件进行判断前循环体都会执行一次
-
循环嵌套
repeat
statements
repeat
statements
until( condition )
until( condition )
还可以使用不同的循环类型来嵌套。
-
break 语句
如果你使用循环嵌套,break语句将停止最内层循环的执行,并开始执行的外层的循环语句。
网友评论