prompt> lua -la -lb命令首先在一个Chunk内先运行a然后运行b。(注意:-l选项会调用require,将会在指定的目录下搜索文件,如果环境变量没有设好,上面的命令可能不能正确运行。)
2.
prompt> lua -i -la -lb将在一个Chunk内先运行a然后运行b,最后直接进入交互模式。
-i选项要求Lua运行指定Chunk后进入交互模式.
3.
在交互模式下加载库:
> dofile("lib1.lua") -- load your library
4.
Lua的变量默认是全局的. 定义局部变量使用local关键字.
--[[
应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突
2. 访问局部变量的速度比全局变量更快.
--]]
5.
注释:
单行注释:--
多行注释:--[[ --]]
6.
nil是Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量赋nil可以删除该变量。类似python中的None.
7.
在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。
8.
string
用单引号和双引号表示字符串, 多行字符串使用[[...]]
9.
运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。反过来,当Lua期望一个string而碰到数字时,会将数字转成string。
-- 尽量避免自动转换, 避免数字与字符串的混合操作.
10.
".."在Lua中是字符串连接符,当在一个数字后面写".."时,必须加上空格以防止被解释错。
11.
显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。反之,可以调用tostring()将数字转成字符串.
12.
and和or的运算结果不是true和false,而是和它的两个操作数相关。
a and b -- 如果a为false,则返回a,否则返回b
a or b -- 如果a为true,则返回a,否则返回b
-- pretty tricky
13.
一个很实用的技巧:如果x为false或者nil则给x赋初始值v
x = x or v等价于
if not x then
x = v
end
14.
C语言中的三元运算符
a ? b : c在Lua中可以这样实现:
(a and b) or c
15.
not的结果只返回false或者true, 和and/or不同
16.
table是非常强大的一个存在. 它的索引下标"默认"从1开始, 而不是0.
它的元素可以是任何类型, 也可以包含数据成员(如下面的x和y).
a = {x=0, y=0, 'aaa', 'bbb', {1,2}, 123}
可以指定索引(模拟字典):
opnames = {["+"] = "add", ["-"] = "sub", ["*"] = "mul", ["/"] = "div"}
强制下标从0开始:
days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。
{x=10, y=45; "one", "two", "three"}
17.
多个变量同时赋值:
当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
a. 变量个数 > 值的个数 按变量个数补足nil
b. 变量个数 < 值的个数 多余的值会被忽略 容易引起误解的变量初始化:
a, b, c = 0容易误解为c=0或者a=b=c=0
print(a,b,c) --> 0 nil nil
-- 尽量保证变量个数和值的个数一致
18.
控制结构语句:
if ... then ... elseif ... then ... else ... end
while ... do ... end
repeat ... until ...
for ... do ... end
for ... in ... do ... end
19.
for语句有两大类:
第一,数值for循环:
for var=exp1,exp2,exp3 doexp1,exp2,exp3分别为初始值,终止值,步进值. exp3默认为1, 此时可省略.
loop-part
end
注意: 这三个表达式只会被计算一次,并且是在循环开始前。
第二,范型for循环:
for i,v in ipairs(a) do print(v) end
for k in pairs(t) do print(k) end
20.
Lua语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前),例如:
local i = 1有时候为了调试或者其他目的需要在block的中间使用return或者break,可以显式的使用do..end来实现:
while a[i] do
if a[i] == v then break end
i = i + 1
end
function foo ()
return --<< SYNTAX ERROR
-- 'return' is the last statement in the next block
do return end -- OK
... -- statements not reached
end
没有评论:
发表评论