Lua丨函数中的可变参数(返回多个参数)~arg的用法

可变参数

Lua中可返回多个参数,C#只能返回一个

  1. function test(...)
  2. print(arg)
  3. --print(arg[2])
  4. end
  5. test()
  6. test(1)
  7. test(1,2)
  8. test(1,2,3)
  9. >lua -e "io.stdout:setvbuf 'no'" "table.lua"
  10. table: 003BB0B8
  11. table: 003BB1A8
  12. table: 003BB248
  13. table: 003BB310
  14. >Exit code: 0

 

arg将我们传递的参数封装成一个表(表内含有输入的参数和所有参数的个数),输出的为该参数的内存地址

将arg定义为arg={...}   便解决了这个问题。此时,这个表里只有输入的参数

  1. function test(...)
  2. --local arg={...}
  3. res=0
  4. for k,v in pairs(arg) do
  5. res=res+v
  6. end
  7. print(res)
  8. end
  9. test()
  10. test(1)
  11. test(1,2)
  12. test(1,2,3)
  13. >lua -e "io.stdout:setvbuf 'no'" "table.lua"
  14. 0
  15. 2
  16. 5
  17. 9
  18. >Exit code: 0

 

  1. function test(...)
  2. local arg={...}
  3. res=0
  4. for k,v in pairs(arg) do
  5. res=res+v
  6. end
  7. print(res)
  8. end
  9. test()
  10. test(1)
  11. test(1,2)
  12. test(1,2,3)
  13. >lua -e "io.stdout:setvbuf 'no'" "table.lua"
  14. 0
  15. 1
  16. 3
  17. 6
  18. >Exit code: 0

 

arg的用法

除了上述的可用于遍历,获得表中传入的内容,还可用#arg获得传入参数的个数

同时,#“string”也可取得一个字符串的长度

  1. function test(...)
  2. local arg={...}
  3. res=0
  4. for k,v in pairs(arg) do
  5. res=res+v
  6. end
  7. print(res.."+"..#arg)
  8. end
  9. test()
  10. test(1)
  11. test(1,2)
  12. test(1,2,3)
  13. >lua -e "io.stdout:setvbuf 'no'" "table.lua"
  14. 0+0
  15. 1+1
  16. 3+2
  17. 6+3
  18. >Exit code: 0

 

(0)

相关推荐