[Lua语言基础]-12、函数进阶_实参简化、可变参数

[复制链接]
查看2198 | 回复2 | 2021-8-18 22:22:40 | 显示全部楼层 |阅读模式
本帖最后由 Aitlo 于 2021-8-20 14:59 编辑
  1. -- 函数进阶_实参简化

  2. function MyFunction()
  3.         print('我的函数')
  4. end

  5. -- 调用函数
  6. MyFunction()

  7. -- 带参函数
  8. function SetName(str)
  9.         
  10.         print('请设置您的昵称:'..str)
  11. end

  12. -- 字符串形式参数调用
  13. SetName('Aitlo')
  14. SetName 'Aitlo'                -- 如果‘实参’是字符串,则圆括号可以简化

  15. -- 带参函数
  16. function SetNamerray(nameArray)
  17.         for i,v in ipairs(nameArray) do
  18.                 print(v)
  19.         end
  20. end
  21. numArray = {1,2,3,4}
  22. SetNamerray(numArray)
  23. -- Table形式的参数调用
  24. SetNamerray {'张三','李四','王五'}                -- 参数的简化

  25. --[[参数的简化
  26. 函数只有一个参数,并且参数是一个字符串或者table构造式,则(实参)圆括号可以省略,这种语法现象成为“参数的简化”--]]

  27. --[[可变参数
  28. “可变参数”又称为“变长参数”,使用符号“...”表示多个参数,主要应用在形参中。
  29.         注意:这里的关键字功能类似C#中的 para关键字--]]
复制代码
  1. -- 学习可变参数
  2. -- 定义一个具备“可变参数”的函数
  3. function MultiParaVal(...)                        -- 注意:这里“...”是一个关键字,表示多个参数。
  4.         for i,v in pairs({...})do
  5.                 print(v)
  6.         end
  7. end

  8. -- 测试“可变参数”
  9. MultiParaVal('叶文洁','罗辑','史强','章北海')

  10. -- 编写简化“可变参数”的写法
  11. --lua语言有一个内置函数“arg”来代替“{...}”
  12. function MultiParaVal(...)                        -- 注意:这里“...”是一个关键字,表示多个参数。
  13.         -- 输出形参的个数
  14.         print('输入参数的个数=',#arg)        -- 表示输入参数的个数
  15.         -- for i,v in ipairs(arg)do                -- ipairs 关键字遇到nil,则不再输出
  16.         for i,v in pairs(arg)do                        -- pairs 关键字可以输出集合中所有飞nil 数值
  17.                 print(v)
  18.         end
  19. end

  20. -- 测试“可变参数”
  21. MultiParaVal('叶文洁','罗辑','史强','章北海')


  22. --[[注意事项一:
  23.         1、lua5.0以上版本通过局部table变量“arg”可以接收所有变长参数。arg是lua中内置的函数,本质是可以把可变参数封装为一个表。(#arg也表示参数的个数)
  24.         2、函数访问变长参数时,使用“{...}”表达式访问。
  25.         
  26.         注意事项二:
  27.         如果变长参数中可能包含nil,则必须使用“select”来访问变长参数。嗲用select 时必须传入一个固定的实参select(选择开关)和一系列变长参数。
  28.         格式:
  29.                 1、select(index,...)返回index 下标开始,知道变长参数数列表结尾的元素。
  30.                 2、select('#',...,) 返回变长参数列表的长度。--]]
  31.                
  32.                
  33.                
  34. -- 对于存在“nil”数值的输入,如何进行“可变参数”函数的编写
  35. -- 含义解释:
  36. -- select('#',...) 表示,返回可变参数的长度
  37. -- select(i,...) 表示,返回从索引数值到可变参数所有内容
  38. function MultiParaVal(...)                        -- 注意:这里“...”是一个关键字,表示多个参数。
  39.         -- 输出形参的个数
  40.         -- print('输入参数的个数=',#arg)        -- 使用#arg 不能用 select,会有冲突。  一定会报错
  41.         print('输入参数的个数=',select('#',...))        
  42.         local num
  43.         
  44.         print(select(1,...))        -- 输出:可变参数里所有的内容:叶文洁        罗辑        史强        nil        章北海
  45.         
  46.         for i=1,select('#',...)do
  47.                 -- num = select(i,...)
  48.                 -- print(num)
  49.                
  50.         end
  51. end
  52. -- 测试“可变参数”
  53. MultiParaVal('叶文洁','罗辑','史强',nil,'章北海')
复制代码



回复

使用道具 举报

junling888 | 2021-8-20 01:57:58 | 显示全部楼层
简化学到了
  1. SetNamerray {'张三','李四','王五'} 
复制代码
回复

使用道具 举报

kingty | 2022-7-17 22:31:37 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则