Lua程序设计随笔(4)

 

Lua函数中,实参的数量可以超过形参的数量,但是超过的部分会被舍弃,

当实参数量少于形参时,轮空的形参也会被设置为nil

function f (a,b)

  return a or b ;

end

f(3)     =>a=3,b=nul;

f(3,4)  =>a=3,b=4;

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

 

多重返回值函数

Lua中函数可以一次返回多个值

多重返回值参数在作为参数的时候,还有特殊的处理

1.函数是作为最后一个一个参数使用,这时会全额返回所有返回值

2.左右参数组中的某一个参数,且不是在末尾,那么只会返回第一个形参的值

3.如果需要被赋值的参数数量大于函数的返回数量,那么超过的部分会用nil代替,除非函数后续有跟其他值;

function foo0 () 

end

 

function foo1() 

  return "a";

end

function foo2() 

  return "a","b";

end

x,y=foo2()  =>x="a",y="b"

x=foo2()       =>x="a","b"被舍弃

x,y,z=10,foo2()  =>x=10,y="a",z="b";

x,y,z=foo2(),10  =>x="a",y=10,z=nil;

print(foo2())    =>a  b

print(foo2() .. "x")  =>ax

4.table可以完整的接受一个函数的所有返回值,但是条件同上

5.return 也可以返回完整的返回时,条件同上

6.存在一个特殊的函数【unpack】,可以完整的返回所有参数,且只受3规则控制,但是参数需要是数组

f=string.find;

a={"hello","ll"};

f(unpack(a))  =>3 4;

(ps,string.find函数用于查询字符串a中字符串b的起始位置和结束位置,string.find(a,b));

 

变长参数

Lua中可以将一个不定长的数组作为形参

function add(...)

  local s=0

  for i,v ipairs{...} do

    s=s+v;

  end

  return s

end

甚至可以

function all(...)

  return ...;

end

同时Lua提供了专门格式化文本和输出文本男的函数

function fwrite(fmt,...)

  return io.write(string.format(fmt,...));

end

需要注意的是,fmt是固定参数,且可以拥有无数个,但是必须放在变长参数之前

fwrite()     =>fmt=nil,没有变长参数

fwrite(“a”)  =>fmt="a",没有变长参数

fwrite(“%d%d”,4,5)  =>fmt="%d%d",变长参数为4和5;

但是变长参数中可能会存在nil值,这是需要函数【select】来操作变长参数;

select("#",...)返回的是变长参数的总数

select(n,...)返回的是变长参数的第n个参数

 

具名实参

Lua中可以通过指定形参的方式给形参赋值,

传一个table 作为参数,可以对指定的参数赋值,函数接受一个table作为形参,这样就可以对对应的参数进行操作赋值

同时这种模式的传值方式,可以设置某些参数为可选的,进而减少处理,已经可以不按照顺序传入,而是依照id对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值