Lua 程式設計教學:函式 (Function)

PUBLISHED ON JAN 24, 2018 — PROGRAMMING

    函式將程式碼區塊包裝起來,可以重覆再利用,也是物件導向和模組的基礎。本文介紹函式本身,其他概念留至後文介紹。

    建立函式

    使用 function 保留字可建立函式。以下程式建立一個簡單的函式,並重覆呼叫三次:

    function hello()
      print("Hello World")
    end
    
    hello()
    hello()
    hello()

    使用參數

    我們可以透過傳入參數 (parameters) 改變函式的行為,如下例:

    function hello(name)
      print("Hello " .. name)
    end
    
    hello("Michael")
    hello("Jenny")
    hello("Tom")

    回傳值

    除了傳入參數外,函式也可以回傳值 (returning values),如下例:

    function add(n)
      return n + 1
    end
    
    assert(add(3) == 4)

    Lua 的函式允許多個回傳值,如下例:

    function divmod(a, b)
      return math.floor(a / b), a % b
    end
    
    local a, b = divmod(7, 3)
    assert(a == 2)
    assert(b == 1)

    不定參數函式

    Lua 的函式可傳入任意個參數,如下例:

    function sum(...)
      local s = 0
      
      for i, e in ipairs{...} do
        s = s + e
      end
      
      return s
    end
    
    assert(sum(1, 2, 3, 4, 5) == 15)

    以表 (table) 做為參數

    若我們將表做為參數,我們可以將參數其中的細項命名,如下例:

    function rename(arg)
      os.rename(arg.old, arg.new)
    end
    
    rename{old="old.txt", new="new.txt"}

    這樣的好處在於不用寫死參數位置,當參數較多時易於記憶。