本頁使用了標題或全文手工轉換

Lua

維基百科,自由的百科全書
前往: 導覽搜尋
Lua
Lua-logo-nolabel.svg
編程範型 多重編程範式指令碼指令式編程程序式原型程式設計物件導向程式),函數程式語言
設計者

Roberto Ierusalimschy Waldemar Celes

Luiz Henrique de Figueiredo
面市時間 1993年
最近釋出日期 5.3.4(2017年1月30日,​5個月前​(2017-01-30
作業系統 跨平台
授權條款 MIT授權條款
網站 www.lua.org

Lua發音: /ˈlə/程式設計語言是一個簡潔、輕量、可延伸的手稿語言,是葡萄牙語中「Lua」(月亮)的意思。

目標[編輯]

Lua的目標是成為一個很容易嵌入其它語言中使用的語言。大多數程式設計師也認為它的確做到了這一點。

很多應用程式使用Lua作為自己的嵌入式手稿語言,以此來實現可配置性、可延伸性。

特性[編輯]

Lua是一種輕量語言,它的官方版本只包括一個精簡的核心和最基本的庫。這使得Lua體積小、啟動速度快。它用ANSI C語言編寫並以原始碼形式開放,編譯後僅僅一百餘K,可以很方便的嵌入別的程式裡。和許多「大而全」的語言不一樣,網路通訊、圖形介面等都沒有預設提供。但是Lua可以很容易地被擴充功能:由宿主語言(通常是C或C++)提供這些功能,Lua可以使用它們,就像是本來就內建的功能一樣。事實上,現在已經有很多成熟的擴充功能模組可供選用。

Lua是一種多重編程範式的程式設計語言:它只提供了很小的一個特性集合來滿足不同編程範式的需要,而不是為某種特定的編程範式提供繁雜的特性支援。例如,Lua並不提供繼承這個特性,但是你可以用元表來模擬它。諸如命名空間這些概念都沒有在語言基本特性中實現,但是我們可以用表結構(Lua唯一提供的複雜資料結構)輕易模擬。Lua可以在執行時隨時構造出一個函式,並把它看作一個物件(正是所謂的first class function),這個特性可以很好的滿足函數語言程式設計的需要。正是提供了這些基本的元特性,我們可以任意的對語言進行自需的改造。

Lua原生支援的資料類型非常之少,它只提供了數字(預設是雙精度浮點數,可配置)、布林量、字串、表、子程式協程(coroutine)以及用戶自訂資料這幾種。但是其處理表和字串的效率非常之高,加上元表的支援,開發者可以高效的模擬出需要的複雜資料類型(比如集合、陣列等)。

Lua是一個動態弱型別語言,支援增量式垃圾收集策略。有內建的,與作業系統無關的協作式多執行緒(coroutine)支援。

Lua可以用於嵌入式硬體,不僅可以嵌入其他編程語言,而且可以嵌入微處理器中,例如NodeMCU開源硬體項目將Lua嵌入到Wi-Fi SoC中[1]

程式範例[編輯]

print("Hello, world!")

執行後,會在螢幕上顯示 Hello, world!

一個比較複雜一點的例子,展示了什麼是函式,以及Lua對閉包的支援:

function create_a_counter()
    local count = 0
    return function()
        count = count + 1
        return count
    end
end

create_a_counter()會返回一個匿名函式(在Lua中,函式和其他資料一樣,是可以指定給變數來儲存的)。這個匿名函式會把count加1後再回傳。在匿名函式中的變數count既不是全域變數也不是區域變數,而是一種稱為external local variable(外部局部變數,又稱upvalue)的變數。這個變數的值會一直被儲存在匿名函式中。因此呼叫create_a_counter()時產生一個記數器函式,每次呼叫記數器函式,都會得到一個比上次大1的值。

變數類型[編輯]

Lua是一種動態型別語言,因此語言中沒有類型的定義,不需要聲明變數類型,每個變數自己儲存了類型。

有8種基本類型:nil、布林值(boolean)、數字型(number)、字串型(string)、用戶自訂類型(userdata)、函式(function)、執行緒(thread)和表(table)。

    print(type(nil))                    -- 输出 nil
    print(type(99.7+12*9))              -- 输出 number
    print(type(true))                   -- 输出 boolean
    print(type("Hello Wikipedia"))      -- 输出 string
    print(type(print))                  -- 输出 function
    print(type{1, 2, test = "test"})    -- 输出 table

參考資料[編輯]

  1. ^ Huang R. NodeMCU devkit. Github. [3 April 2015]. 

外部連結[編輯]

官方站點
手冊