[Lua语言基础]-8、函数

[复制链接]
查看1995 | 回复0 | 2021-8-17 21:43:33 | 显示全部楼层 |阅读模式
  1. -- 定义函数
  2. --[[函数的定义格式如下:
  3.         function funName(paral,para2,...)
  4.                 [函数体]
  5.         end
  6.        
  7. lua 函数基本性质:       
  8.         1.函数无需定义返回类型,可以返回任意类型与任意数量的数据。
  9.         2.函数的参数,无需定义参数类型。
  10.         3.函数无需大括号。
  11.         4.可以定义变量,把函数直接赋值给它,从而获得相同功能。--]]
  12.        
  13. print("定义第一个函数")
  14. function funName1()
  15.         print('我是一个函数')
  16. end

  17. -- 调用函数
  18. funName1()

  19. print("定义第二个函数")
  20. -- 定义第二个函数(带有返回值)
  21. function funName2(num1,num2)
  22.         print('我是一个函数,输出的参数='..num1,num2)
  23.         return num1+num2
  24. end

  25. -- 调用函数
  26. num1 = 100
  27. num2 = 200
  28. result = funName2(num1,num2)
  29. print("函数返回数值是="..result)

  30. -- 函数赋值个变量
  31. fun3 = funName2
  32. --result1 = fun3(60,20)
  33. result1 = fun3('同学们','大家好')                -- 报错!

  34. print('一个新的变量得到函数的引用 result1='..result1)

  35. -- 注意:函数中由于我们函数的参数没有类型,所有在没有(编译)运行前,计算机是无法发现错误,这在C#/java等编译型语言中,是一个明显弱点。
复制代码
  1. -- 函数的多返回值
  2. --[[一个函数返回多个数值,可以使用多个变量直接接收
  3.         eg:
  4.                 function GetNumber()
  5.                         return 100,200
  6.                 end
  7.         num1,num2 = GetNumber()
  8.         print(num1.num2)
  9.        
  10. 函数多返回值性质
  11.         1.如果一个函数调用在最后,或者仅有一个表达式,则lua会保留尽可能多的返回数值,用于匹配。
  12.         2.如果一个函数没有返回值,或者没有足够的返回数值,那么lua会用nil 来补充缺失数值。--]]

  13. --函数的多返回数值
  14. function GetNumber()
  15.         return 10,20,30,40
  16. end

  17. -- 测试
  18. res1,res2,res3 = GetNumber()
  19. print(res1,res2,res3)

  20. -- 函数的赋值:函数可以作为数据进行赋值,也可以作为参数进行传递(相当于C#的委托)
  21. -- 学习函数作为参数。
  22. function PrintInfo(result)
  23.         print('计算的结果')
  24.         print(result)
  25. end


  26. -- 加法函数
  27. function AddNum(num1,num2,printFunc)
  28.         local result = num1+num2
  29.         -- 输出
  30.         printFunc(result)
  31. end

  32. -- 减法函数
  33. function SubNum(num1,num2,printFunc)
  34.         local result = num1-num2
  35.         -- 输出
  36.         printFunc(result)
  37. end

  38. AddNum(1,2,PrintInfo)                -- 加法函数“PrintInfo”就是一个函数作为参数进行调用
  39. SubNum(4,2,PrintInfo)                -- 减法函数
复制代码
  1. -- 函数全局与局部变量
  2. -- 学习local 关键字,学习全局与局部变量
  3. --[[lua中定义的变量默认都是全局变量,且在函数内部定义的变量也默认是全局变量。

  4. 在函数中定义的全局变量,在函数外部照样可以访问。

  5. 函数可以声明为全局的与局部的,默认都是全局的。
  6.         eg:local function LocFunc()--]]
  7. function fun4()
  8.         print('这是func4 函数')
  9.         gNum1 = 10                        -- lua语言规定:变量默认都是全局变量,无论是否定义在语句块中。
  10.         local num2 = 20                -- 使用local 关键字 定义局部变量。局部变量不能再函数的外部使用。
  11. end
  12. -- 调用
  13. fun4()
  14. -- 测试全局/局部 变量
  15. print('num1='..num1)        -- num1 输出10 表示num1 是全局变量。
  16. print('num1='..num2)        -- num2 报错无法输出。

  17. -- 局部函数
  18. -- function 前面可以加个local 表示:“局部函数”
复制代码
  1. -- 匿名函数
  2. --[[匿名函数定义:没有函数名称的函数
  3. 匿名函数如何调用?
  4.         一个没有名称的函数,只有通过赋值给一个变量(相当于C#的委托注册方法),我们通过这个(函数)变量来简介调用这个匿名函数。--]]
  5.        
  6. -- 学习匿名函数
  7. hedeFunc = function (num1,num2)
  8.         print('我是一个匿名函数')
  9.         print(num1+num2)
  10. end

  11. -- 调用匿名函数(本质调用的是匿名函数赋值给的变量)
  12. hedeFunc(66,88)
复制代码



回复

使用道具 举报

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

本版积分规则