3-4 章。
lua 支持的数值运算符有:+
(加),-
(减),*
(乘),/
(除),^
(指数),%
(求余),-
(取相反数)。%
还有取特定精度的作用,例如 x%1
表示取 x 的整数部分,而x%0.01
则取到小数点后两位。
关系运算符:<
,>
,<=
,>=
,==
,~=
(不等于)。
逻辑运算符:and
,or
,not
。
连接操作符:..
(将两个字符串连接起来)。
运算符的优先级从高到低排列,同一行的运算符优先级相同,按出现的位置从左往右结合:
^
not # -(取相反数)
* / %
+ -
..
< > <= >= ~= ==
and
or
实在记不清的话加括号就行了。
table 的初始化使用 {}
或者在 {}
中包含初始值:
letters = {"a", "b", "c", "d", "e"}
print(letters[3]) -- "c"
table 下标从 1 开始(看来如果不显式指定 key 的值默认用下标代替 key)。另外也可以使用下面的语法进行初始化:
a = {x = 10, y = 20}
b = {}; b.x = 10; b.y = 20
print(a["x"]) -- 10
a 和 b 的初始化方法是等价的。初始化还可以嵌套:
a = {
{x = 10, y = 20},
{x = -10, y = -20}
}
print(a[2]["y"]) -- -20
上面两种初始化的方法都有限制,例如索引不能为负数,或者 key 的值不是合法的标识符(合法的标识符以字母,数字和下划线组成,并且开头不能是数字)。lua 提供了另外一种初始化的方法:
opnames = {["+"] = "add", ["-"] = "sub"}
a = {[-2] = 100, [-1] = 10}
print(opnames["+"]) -- "add"
print(a[-1]) -- 10
如果需要数组的下标从 0 开始,利用上面的初始化方法可以这样写:
a = {[0] = "a", "b", "c", "d", "e"}
print(a[0]) -- a
print(a[1]) -- b
“b”的下标从 1 开始,因为它是列表的第一个元素(因为“a”是指定了 key 为 0 的元素,而除了“a”之外都没指定 key,默认就从 1 开始编号了)。
lua 中的函数中默认数组下标从 1 开始,所以最好不要指定下标从 0 开始。
另外在初始化列表中使用分号代替逗号也是可以的,这个可以用来标识不同的块:
a = {x = 10; y = 45; "one", "two", "three",}
print(a["x"]) -- 10
print(a[2]) -- "two"
在最后一个元素后加上逗号也是合法的。
除了前面提到的单个元素赋值以外,lua 还支持多个元素分别赋值:
x, y = 10, 20
print(x) -- 10
print(y) -- 20
lua 会先将等号右边的值都计算出来,再进行赋值操作,所以交换两个元素的值可以这样写:
x,y = y, x
如果等号左边的元素个数比右边的少,那么右边多出来的元素会被忽略;如果右边的比左边的少,那么左边多出来的元素会被赋值为 nil:
x, y, z = 10, 20 -- x = 10, y = 20, z = nil
x, y = 10, 30, 50 -- x = 10, y = 30
条件分支的语法:
if condition then
do something
end
或者
if condition1 then
do something
elseif condition2 then
do something
end
while 循环的语法:
while condition do
do something
end
repeat 循环的语法:
repeat
do something
until condition
for 循环有两种,一种是数值型的,语法是
for var = exp1, exp2, exp3 do
do something
end
表示变量从 exp1 递增到 exp2,递增的步长是 exp3。如果省略了 exp3 则默认为 1。例如:
for i = 1, 10, 2 do
print(i)
end
打印 1-10 之间的单数。如果想使用无限循环,exp2 使用 math.huge。
另一种 for 循环的形式是通过迭代器访问所有元素,例如:
days = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}
for k, v in pairs(days) do
print(v, k)
end
上面提到的变量默认都是全局变量,如果需要使用一个局部变量,在变量前加上关键字“local”:
for var = 1, 10, 2 do
local i
i = var + 1
print(i)
end
print(i) -- nil
变量 i 只在 for 循环内有效,在 for 循环之后使用的 i 是全局变量,不同于 for 循环里的 i,被初始化为 nil。
在循环里使用 break 可以立即退出当前循环,马上执行循环后的第一条语句:
a = {"a", "b", "c", "d", "e"}
i = 1
while a[i] do
if a[i] == "c" then
break
end
i = i + 1
end
print("i =", i)
return 可以立即终止当前函数。每个函数的最后都隐含有一个 return 语句。
从语法上来讲,break 和 return 只能是块中的最后一条语句,即它们的位置是关键字 end,else 或者 until 之前。
小子学习很用功啊
不用功进不了你的公司啊