1. 程式人生 > >Lua語言的介紹和編程語言的歸類

Lua語言的介紹和編程語言的歸類

啟動 site 自定義類型 進行 定義類 邏輯 d語言 發音 mit

Lua

本條目介紹的是一種編程語言。關於關於Lua在維基百科中的使用,請見“維基百科:Lua”。關於“Lua”一詞的其他意思,請見“盧阿”。
Lua
技術分享圖片
編程範型 多重編程範式,腳本,命令式編程(過程式,基於原型的編程,面向對象程序),函數編程語言
設計者

Roberto Ierusalimschy Waldemar Celes

Luiz Henrique de Figueiredo
發行時間 1993年
最新發行時間 5.3.4(2017年1月30日,?10個月前)
操作系統 跨平臺
許可證 MIT許可證
網站 www.lua.org

Lua發音: /?lu??/)程序設計語言是一個簡潔、輕量、可擴展的腳本語言,是葡萄牙語中“Lua”(月亮)的意思。

目錄

[隱藏]
  • 1目標
  • 2特性
  • 3程序示例
  • 4變量類型
  • 5參考資料
  • 6外部鏈接

目標

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].

外部鏈接

官方站點
  • Lua.org(英文)
  • 官方英文郵件列表(英文)、郵件列表存檔(英文)或者Gmane lua列表存檔(英文)
手冊
  • Book : Programming in Lua(英文)
  • manual.luaer.cn lua在線手冊
  • book.luaer.cn lua在線lua學習教程
  • lua參考手冊Lua參考手冊的中文翻譯(雲風翻譯版本)
分類:
  • 程序設計語言
  • 使用MIT許可證的軟件
  • C軟件
  • 用C編程的自由軟件
  • 巴西發明

Lua語言的介紹和編程語言的歸類