读《Lua程序设计》笔记--函数

a.多重返回值

Lua允许函数返回多个结果,只需在return关键字后列出所有的返回值即可

查找数组中的最大元素
1
2
3
4
5
6
7
8
9
10
11
function maximum(a)
local mi = 1  --最大值的索引
local m = a[mi]  --最大值
  for i,val in ipairs(a) do
    if val>m then
      mi = i; m=val
    end
  end
return m, mi
end
print (maximum({8,10,23,12,5}))  -->23  3

b.变长参数

返回所有参数的总和
1
2
3
4
5
6
7
8
function add(...)
    local s = 0
    for i,v in ipairs({...}) do  --ipairs({...})可以简写为ipairs{...}
        s = s + v
    end
    return s
end
print(add(3,4,10,25,12)) -->54

表达式“…”的行为类似于一个具有多重返回值的函数,它返回的是当前函数的所有变长参数

c.具名参数 虽然Lua不支持

1
rename(old="temp.lua", new="temp1.lua")  --无效的演示代码

这样的语法,但是可以将所有的实参组织到一个table中,并将这个table作为唯一的实参传给函数。当实参只有一个table的构造式时,函数调用中的圆括号是可有可无的:

1
2
3
4
function rename(arg)
    return os.rename(arg.old, arg.new)
end
rename{old="temp.lua", new="temp1.lua"}