lua学习笔记day02-----函数

当函数只有一个参数的时候,且这个参数是字符串或者是表构造的时候。调用形式可以如下:

print"hello word"     type{}

函数的形参和实参匹配的时候,和多值赋值是一样的,实参多余的部分会舍弃,少的部分会用nil填上


多值返回 :

function foo2 ()

return 4,5

end

当函数被独立调用的时候(类似:foo2()),它的返回值将被忽略。

当函数作为表达式被掉用的时候有两种情况:

1、函数作为这个表达表达式的唯一参数,或者时最后一个参数,它会尽可能多的返回值。

PS:

x=foo2() ==> x = 4

x,y=foo2() ==> x=4,y=5

x,y,z = foo2() ==> x=4,y=5,z=nil

print (10,foo2())   ==> 10,4,5

2、其他情况下,foo2只返回第一个值

PS:print(foo2(),10)  ==> 4,10


function foo(i)

if i==1 then return foo1()

elseif i==2 then return foo2()

elseif i==3 then return foo3()

end

end


像上述这种情况,foo*是在另一个函数的return语句中的。

如果单纯的调用foo(i),那么foo*()是返回所有的值的。

如果是(foo(i)),这么调用,那么foo*()只返回第一个值。

如果在return语句之后加括号,例如 return(foo2()),也会导致foo2()只返回第一个值。



可变参数 :

在函数的形参中可以通过 ... 来表示一个函数还拥有其他未知的参数。

PS :test(x,...)

在调用test的时候,会把第一个实参放到x中,剩下的实参会放到test 的arg表中,arg表还包含一个recod 记录具体实参的个数。

PS: test (10,9,8)  x=10,  arg={9,8,n=2}

可以通过操作arg表来把函数的实参读取出来,给其他函数用。

(ps:这个例子我在虚拟机上没有尝试成功,需要之后回头再看)

找到原因了,在lua5.2版本里,已经取消了这个默认的arg表,如果要使用可变部分的参数,需要显式的声明一个表去接受,例如:

function test(...)

arg = {...}

...

end

命名参数 :

因为lua是可以将表作为函数的参数的,所以可以通过表的索引来指定表中的某个元素的值。

PS:假设test是可变参数,且有具体实现

function test(arg)

return test(arg.one,arg.two)

end

这个时候调用test,它的参数就可以用以下方式填写

test{”one“=big,“two”=small}

这种方法的好处在于,不需要记住参数的位置,且每个元素有个性化的索引,非常直观的知道哪个参数,需要带入什么值。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值