可变参数

本文介绍了Lua语言中如何处理可变数目的函数参数,包括如何使用arg表来获取额外的参数,以及如何通过unpack函数传递这些参数给其他函数。同时展示了如何重写print函数和实现select函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数。

例如,我们可以重写print函数:

printResult = ""

 

function print(...)

    for i,v in ipairs(arg) do

       printResult = printResult .. tostring(v) .. "\t"

    end

    printResult = printResult .. "\n"

end

有时候我们可能需要几个固定参数加上可变参数

function g (a, b, ...) end

 

CALL              PARAMETERS

 

g(3)              a=3, b=nil, arg={n=0}

g(3, 4)           a=3, b=4, arg={n=0}

g(3, 4, 5, 8)     a=3, b=4, arg={5, 8; n=2}

如上面所示,Lua会将前面的实参传给函数的固定参数,后面的实参放在arg表中。

举个具体的例子,如果我们只想要string.find返回的第二个值。一个典型的方法是使用哑元(dummy variable,下划线):

local _, x = string.find(s, p)

-- now use `x'

...

还可以利用可变参数声明一个select函数:

function select (n, ...)

    return arg[n]

end

 

print(string.find("hello hello", " hel")) --> 6  9

print(select(1, string.find("hello hello", " hel"))) --> 6

print(select(2, string.find("hello hello", " hel"))) --> 9

有时候需要将函数的可变参数传递给另外的函数调用,可以使用前面我们说过的unpack(arg)返回arg表所有的可变参数,Lua提供了一个文本格式化的函数string.format(类似C语言的sprintf函数):

function fwrite(fmt, ...)

    return io.write(string.format(fmt, unpack(arg)))

end

这个例子将文本格式化操作和写操作组合为一个函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值