第 5 章 函数

一个函数只有一个参数

print "Hello World"   <--> print("Hello World")
dofile 'a.lua'  <--> dofile('a.lua')
f { x = 10 , y = 20 }

两种操作
o.foo(o,x)
o:foo(x)

舍弃多余的参数

function f(a,b) 
   return a or b
end

f(3)  a = 3 , b =nil
f( 3, 4)  a =3, b = 4
f( 3, 4, 5 )  a = 3, b = 4  (5被舍弃)

5.1 多重返回值

             Lua会调整一个函数的返回值数量以适应不同的调用情况。若将函数调用作为一条单独语句时,Lua会丢弃函数的所有返回值。若将函数作为表达式的一部分来调用时,Lua只保留函数的第一个返回值。只有当一个函数调用是一系列表达式中的最后一个元素时,才能获得所有返回值。这里先给出三个样例函数,如:


    function foo0() end
    function foo1() return "a" end
    function foo2() return "a","b" end

示例代码结果注释
x,y = foo2()x = "a", y = "b"函数调用时最后的(或仅有的)一个表达式,Lua会保留其尽可能多的返回值,用于匹配赋值变量。
x = foo2()x = "a", 返回值"b"被忽略
x,y,z = 10,foo2()x = 10, y = "a", z = "b"
x,y = foo0()x = nil, y = nil如果一个函数没有返回值或者没有足够多的返回值,那么Lua会用nil来填补。
x,y = foo1()x = "a", y = nil
x,y,z = foo2()x = "a", y = "b", z = nil
x,y = foo2(),20x = "a", y = 20如果一个函数调用不是一系列表达式的最后一个元素,那么将只产生一个值。
x,y = foo0(),20,30x = nil, y = 20, 30被忽略。
print(foo0()) 当一个函数调用左右另一个函数调用的最后一个实参时,第一个函数的所有返回值都将作为实参传入第二个函数。
print(foo1()) a
print(foo2())a    b
print(foo2(),1)a    1
t = {foo0()} t = {} --空table table构造器可以完整的接收一个函数调用的所有结果,即不会有任何数量方面的调整。  
t = {foo1()} t = {"a"} 
t = {foo2()}t = {"a", "b"}
t = { foo0(), foo2(), 4}t[1] = nil, t[2] = "a", t[3] = 4果函数调用不是作为最后一个元素,那么只返回函数的第一个结果值。
print((foo2()))a如果函数调用放入圆括号中,那么Lua将只返回该函数的第一个结果值。


5.2 变长参数
function add( . . . )
local s =0 
for i ,v in ipairs ( . . . ) do
   s = s + v 
end
return s
end

print(add({3,4,5,6,7}))

local a,b = ...

遍历所有变长参数
for i =1, select('#', ... ) do          ---会返回所有变长参数的总数,其中包括 nil
  local arg  = select( i, ...)
   <循环体>
end

5.3 具名实参
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值