2.10 函数

我们将程序中反复执行的代码封装到一个代码块中,这个代码块模仿了数学中的函数,具有函数名、参数和返回值。

Lua中的函数很灵活,可以有全局函数和局部函数等,函数还可以作为一个值传递。

2.10.1 使用函数

使用函数首先需要定义函数,然后在合适的地方调用该函数,函数的语法格式如下:

      function函数名(参数列表){
          语句组
          [return返回值]
      }

在Lua中定义函数时关键字是function,“函数名”需要符合标识符命名规范,“参数列表”可以有多个且它们之间用逗号(, )分隔,极端情况下可以没有参数。

如果函数有值,则需要使用return语句将值返回;如果没有返回值,则函数体中可以省略return语句。

函数定义示例代码如下:

      function rectangleArea(width, height)                                             ①
        local area = width* height
        return area                                                                     ②
      end

      print("320x480的长方形的面积:"..rectangleArea(32, 64))                           ③

上述代码第①行是定义计算长方形的面积rectangleArea,它有两个参数,分别是长方形的宽和高。第②行代码是返回函数计算结果。调用函数的过程是通过第③行代码中的rectangleArea(32, 64)语句实现,调用函数时候需要指定函数名和参数值。

2.10.2 变量作用域

变量可以定义在函数体外,即全局变量;也可以在函数内定义,即局部变量,局部变量作用域是在函数内部有效,如果超出函数体就会失效。

我们看看下面的示例代码:

      local global = 1                                                               ①

      function f()
        local local1 = 2                                                             ②
        global = global + 1                                                          ③
        return global
      end

      f()

      print(global)                                                                  ④
      print(local1)                                                                  ⑤

上述代码第①行定义了全局变量global,第②行代码是定义了局部变量local1, local1是在函数体内部定义的。第④行代码是打印全局变量global,第⑤行代码是打印局部变量local1,该语句在运行时候会发生错误,这是因为local1是局部变量,作用域是在f函数体内部。

2.10.3 多重返回值

Lua的函数可以返回多个值,它的函数表达式可以同时赋值给多个变量。这是在其他语言中没有见到的,C和C++等语言要想返回多个值,可以通过给函数传递指针类型的参数实现,在Java中可通过传递引用类型参数实现。

多重返回值示例代码如下:

      --定义计算长方形面积和周长函数
      function caleRectangle(width, height)

        local area = width* height
        local perimeter = (width+ height)* 2

        return area, perimeter                                                          ①
      end

      --获得计算长方形面积和周长
      local area, perimeter = caleRectangle(10,15)                                     ②
      print("宽 10 高 15,长方形面积:"..area.."长方形周长:"..perimeter)

上述代码第①行是函数caleRectangle的返回语句,该语句中返回多个值,多个值之间用逗号“,”分隔。第②行代码是调用caleRectangle函数,并且可以直接赋值给变量area和perimeter,这些变量之间也是用逗号“, ”分隔。