本帖最后由 Aitlo 于 2021-8-20 14:59 编辑
- -- 函数进阶_实参简化
- function MyFunction()
- print('我的函数')
- end
- -- 调用函数
- MyFunction()
- -- 带参函数
- function SetName(str)
-
- print('请设置您的昵称:'..str)
- end
- -- 字符串形式参数调用
- SetName('Aitlo')
- SetName 'Aitlo' -- 如果‘实参’是字符串,则圆括号可以简化
- -- 带参函数
- function SetNamerray(nameArray)
- for i,v in ipairs(nameArray) do
- print(v)
- end
- end
- numArray = {1,2,3,4}
- SetNamerray(numArray)
- -- Table形式的参数调用
- SetNamerray {'张三','李四','王五'} -- 参数的简化
- --[[参数的简化
- 函数只有一个参数,并且参数是一个字符串或者table构造式,则(实参)圆括号可以省略,这种语法现象成为“参数的简化”--]]
- --[[可变参数
- “可变参数”又称为“变长参数”,使用符号“...”表示多个参数,主要应用在形参中。
- 注意:这里的关键字功能类似C#中的 para关键字--]]
复制代码- -- 学习可变参数
- -- 定义一个具备“可变参数”的函数
- function MultiParaVal(...) -- 注意:这里“...”是一个关键字,表示多个参数。
- for i,v in pairs({...})do
- print(v)
- end
- end
- -- 测试“可变参数”
- MultiParaVal('叶文洁','罗辑','史强','章北海')
- -- 编写简化“可变参数”的写法
- --lua语言有一个内置函数“arg”来代替“{...}”
- function MultiParaVal(...) -- 注意:这里“...”是一个关键字,表示多个参数。
- -- 输出形参的个数
- print('输入参数的个数=',#arg) -- 表示输入参数的个数
- -- for i,v in ipairs(arg)do -- ipairs 关键字遇到nil,则不再输出
- for i,v in pairs(arg)do -- pairs 关键字可以输出集合中所有飞nil 数值
- print(v)
- end
- end
- -- 测试“可变参数”
- MultiParaVal('叶文洁','罗辑','史强','章北海')
- --[[注意事项一:
- 1、lua5.0以上版本通过局部table变量“arg”可以接收所有变长参数。arg是lua中内置的函数,本质是可以把可变参数封装为一个表。(#arg也表示参数的个数)
- 2、函数访问变长参数时,使用“{...}”表达式访问。
-
- 注意事项二:
- 如果变长参数中可能包含nil,则必须使用“select”来访问变长参数。嗲用select 时必须传入一个固定的实参select(选择开关)和一系列变长参数。
- 格式:
- 1、select(index,...)返回index 下标开始,知道变长参数数列表结尾的元素。
- 2、select('#',...,) 返回变长参数列表的长度。--]]
-
-
-
- -- 对于存在“nil”数值的输入,如何进行“可变参数”函数的编写
- -- 含义解释:
- -- select('#',...) 表示,返回可变参数的长度
- -- select(i,...) 表示,返回从索引数值到可变参数所有内容
- function MultiParaVal(...) -- 注意:这里“...”是一个关键字,表示多个参数。
- -- 输出形参的个数
- -- print('输入参数的个数=',#arg) -- 使用#arg 不能用 select,会有冲突。 一定会报错
- print('输入参数的个数=',select('#',...))
- local num
-
- print(select(1,...)) -- 输出:可变参数里所有的内容:叶文洁 罗辑 史强 nil 章北海
-
- for i=1,select('#',...)do
- -- num = select(i,...)
- -- print(num)
-
- end
- end
- -- 测试“可变参数”
- MultiParaVal('叶文洁','罗辑','史强',nil,'章北海')
复制代码
|