--[[ 5 函数 在lua中,函数是一种对语句和表达式进行抽象的主要机制。函数既可以完成某项特定的任务,也可以只做一些计算并返回结果。 第一种情况,一句函数调用被视为一条语句;第二种情况中,将其视为一句表达式. print(4 or 6) x=math.sin(3)+math.cos(10) print(os.date()) 无论哪种用法都需要将所有参数放到一对圆括号中。即使调用函数时没有参数,也必须写出一对空括号。对于此规则只有一种特殊的例外情况:一个 函数若只有一个参数,并且此参数是一个字面字符串或table构造式,那么圆括号便是可有可无的。 print "hello world" dofile 'a.lua' 函数默认调用的是局部变量,实例: --------- i=12 local i=10 print(i) print(_G.i) --------- ]]-- --[[ 5.1 多重返回值 -- Lua 具有一项非常与众不同的特征,允许函数返回多个结果。Lua的几个预定义函数就是返回多个值的。 -- Lua 编写的函数同样可以返回多个结果,只需要在return关键字后列出所有的返回值即可。 -- Lua 中的函数还可以接受不同数量的实参。 ]]-- function maximum(a) local mi=1 local m =a[mi] for i,val in ipairs(a) do if val >a[i] then mi=i m=val end end return mi,m end print(maximum({10,23,44,12,6})) --[[ -- Lua 5.3 具名实参 -- 在Lua中的参数传递机制是具有“位置性”的,也就是说在调用一个函数时,实参时通过它在参数表中的位置与形参匹配起来的。第一个实参的值与第一 --个实参的值与第一个形参相匹配,以此类推。但有时候通过名称来指定实参也是很有用的。 -- os.rename("",""),我们希望能指定这两个参数那个是原始的名称,哪个是需要修改成的名字, -- --无效代码: -- os.rename(old="",new="') -- Lua 并不直接支持这种语法,但可以通过一种细微的改变来获得相同的效果。主要是将所有的实参组织到一个table中,并将这个table作为唯一的实 --参传给函数。另外,还需要用到一种Lua中特殊的函数调用语法,就是当实参只有一个table构造式时,函数调用中的圆括号是可有可无的: -- os.rename{old="",new=""} --这种语法不一定在代码中能正确的运行。 -- -- -- -- ]]--