lua的select函数理解


关于lua的select函数,是可以用于计算参数个数的或者获取指定索引之后的参数;当select函数用于计算传递进来的参数个数时需要在第一个参数位置使用 #符号;否则就需要使用数字 n来进行获取某个指定索引后的参数;我看这部分教程时发现很多都是把 select(n,...)这个函数说是返回指定索引的参数,但是实际操作中返回的是 第n个索引后的所有参数;下面是两种用法的操作分析

一、用计算传递进来的参数个数

普通函数上使用的select

这是计算传递进来的参数个数
print (select("#",1,2,"e",3)) ----->输出结果为4

注意这里计算的话,是不能计算数组和表里面的元素个数的
a = {1,2,3,4}
print (select("#",a))	------>输出结果为1,这里会将数组a看作为一个参数进行计算,因此输出1

变参函数上使用的select函数,下面是一个用于计算接收到的参数个数的变参函数

function cal_sum(...)

	return select("#",...) 	------->返回计算到的参数个数
end

print(cal_sum(1,2,3,4,5,5))	------->打印计算


二、输出第n个索引后的所有参数

这一部分需要着重看一下,一开始我也是对于这方面不太懂;因为很多教程都是写返回的是一个参数;但是使用print函数直接对其结果进行打印时发现打印的是指定索引后的所有值;一共可以使用两种方法进行打印zai

1、通过直接使用print函数打印其返回值

function cal_sum(...)

	print(select(3,...) )
end

print(cal_sum(1,2,3,4,5,5))

2、通过使用参数接收其返回值再进行打印;但是这种方法需要预先知道返回的参数个数,否则接收的变量少于返回的变量会导致后面的无法接收到;或者定义的变量多与返回的值将会导致没有接收到返回值的变量为nil

function cal_sum(...)

	a,b,c,d = select(3,...)
	print(a,b,c,d)

end

print(cal_sum(1,2,3,4,5,5))
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Lua 中没有内置的 settimeout 函数。但是你可以使用 coroutines(协程)和 Lua 的 socket 库来实现类似的效果。 下面是一个使用 coroutines 和 socket 的示例代码,模拟实现一个类似于 settimeout 的功能: ```lua local socket = require("socket") function settimeout(timeout) local co = coroutine.running() -- 获取当前协程 local timer = socket.tcp() -- 创建一个 TCP socket timer:settimeout(timeout) -- 设置超时时间 local function callback() timer:close() -- 关闭 socket timer = nil coroutine.resume(co) -- 恢复当前协程 end timer:connect("127.0.0.1", 0) -- 连接到一个不存在的 IP 地址,触发超时 timer:close() -- 关闭连接,立即触发超时 timer:remove() -- 从 socket select 列表中移除 -- 创建一个新的协程,在其中等待超时时间到达 -- 当超时时间到达后,调用回调函数 coroutine.wrap(callback)() coroutine.yield() -- 暂停当前协程,等待超时或者回调函数执行完毕 -- 超时或者回调函数执行完毕后,清理相关资源 if timer then timer:close() timer = nil end end -- 使用示例 print("Start") settimeout(2) -- 设置超时时间为 2 秒 print("Timeout!") ``` 在上面的示例中,我们使用了 Lua 的 socket 库创建了一个 TCP socket,并设置了超时时间。然后,我们通过连接到一个不存在的 IP 地址或者立即关闭连接来触发超时。同时,我们也创建了一个新的协程,在其中等待超时时间到达后调用回调函数。 请注意,这只是一个示例,实际应用中可能需要根据具体需求进行相应的修改和扩展。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值