Lua base select()
2016-11-19 本文已影响484人
AlbertS
选择.jpg
前言
今天这个函数看到的时候,第一印象就是想到了c语言中大名鼎鼎的select
函数,因为他们函数名是一样的,并且lua也是用c语言实现的,所以我认为这个函数跟那个是相同的,可是转念一想lua好像没有什么和网络相关的函数,然后查了一下这个函数的定义,发现这个函数真的就是字面的意思,起到一个选择的作用,我们一起来看一下函数的用法。
内容
select()
- 原型:select(index, ···)
- 解释:如果
index
是一个数字,函数返回参数指定索引后的所有参数(包括当前索引的参数),否则参数index
必须是一个字符串#
,这时函数返回它接收到的额外参数总共的个数。
usage
- 首先我们新建一个文件将文件命名为selecttest.lua然后编写代码如下:
-- 先来试试数字索引
print("\nthe number index result:")
print(select(2, 'b', 'c', 'd', 'e'));
-- 无效的索引
print("\nthe number index of invalid result:")
print(select(20000, 'b', 'c', 'd', 'e'));
-- 字符串#索引
print("\nthe '#' index of invalid result:")
print(select('#', 'b', 'c', 'd', 'e'));
-- 再来看一个常用的例子
function print_multi_argv(...)
print("\narg list is")
for i = 1, select('#', ...) do -- get the count of the params
local cur_arg = select(i, ...); -- select the param
print(cur_arg);
end
end
-- 试验一下打印多个参数
print_multi_argv(1, 2, 3, 'a', 'b', 'f', 't')
- 运行结果
总结
- 学习这个函数的时候要注意和C语言中的
select
网络相关的函数区分开,它们两个没有一丁点关系。 - 在打印多个参数的例子宏我们利用了一个返回值,实际上函数每次都会返回多个参数,只不过那些多余的参数被我们省略了。
- 函数的参数
index
只能接收一个字符串类型的参数,那就是'#'
,除此之外只能接收数字,如果输入的索引值过大,则不会有结果,但是如果输入负数,则会引发程序错误。