lua学习笔记06

函数多吃返回的特殊函数unpack,接收一个数组作为输入参数,返回数组的所有原始。Unpack被用来实现泛型调用机制,在C语言中可以使用函数指针调用可变的函数,可以声明参数可变的函数,但是不能两者同时可变,在Lua中入过你想调用可变参数的可变函数只需要这样:

f(unpack(a)) 

unpack返回a所有的元素作为f()的参数

f = string.find
a = {"hello","ll"}
print(f(unpack(a)))

预定义unpack函数使用C语言实现的,我们也可以用Lua来完成:

function unpack(t,i)
	i = i or 1
	if t[i] then
		return t[i],unpact(t,i + 1)
	end
end

 

可变参数

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

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

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}
function select(n,...)
 return arg[n]
end
print(string.find("hello hello","ll"))
print(select(1,string.find("hello hello","ll")))
print(select(2,string.find("hello hello","ll")))

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

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

end


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值