构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构
造函数是{},用来创建一个空表。
days = {"Sunday","Monday","Tuesday","Wednesday",?
"Thursday","Friday","Saturday"}?
Lua将"Sunday"初始化days[1](第一个元素索引为1),用"Monday"初始化days[2]
不推荐数组下标从0开始,否则很多标准库不能使用
默认是以数字为key,值为value
也可以自己指定key 和 value ?例如a = { x=1,y=1}
a["x"] = 1 a["y"] = 1
第一,数值for循环:
forvar=exp1,exp2,exp3 do
loop-part?
end?
for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中
exp3可以省略,默认step=1?
Lua也提供了面向对象方式调用函数的语法,比如o:foo(x)与o.foo(o,x)是等价的,
后面的章节会详细介绍面向对象内容。
return f()这种类型的返回f()返回的所有值
functionfoo (i)?
ifi == 0 then returnfoo0()?
elseifi == 1 then returnfoo1()?
elseifi == 2 then returnfoo2()?
end?
end?
unpack返回a所有的元素作为f()的参数
f = string.find?
a = {"hello","ll"}?
print(f(unpack(a))) ?--> 3 4?
functionunpack(t,i)?
?i = i or1?
ift[i] then
returnt[i],unpack(t,i + 1)?
end?
end?
Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)
表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg
表中还有一个域n表示参数的个数。
例如,我们可以重写print函数:
printResult = ""
functionprint(...)?
fori,v inipairs(arg) do
? printResult = printResult .. tostring(v) .. "t"
end?
?printResult = printResult .. "n"
end?
Lua中关于函数稍微难以理解的是函数也可以没有名字,匿名的。当我们提到函数
名(比如print),实际上是说一个指向函数的变量,像持有其他类型值的变量一样:
a = {p = print}?
a.p("Hello World") ?--> Hello World?
print = math.sin -- `print' now refers to the sine function?
a.p(print(1)) ?--> 0.841470?
sin = a.p ? ?-- `sin' now refers to the print function?
sin(10,20) ? --> 10 20?
table.sort(network,function(a,b)? return(a.name > b.name)? end)?