Lua

維基教科書,自由的教學讀本
維基百科中的相關條目:

Lua(luːə)程序設計語言是一個簡潔(易於編輯)、輕量、可擴展的腳本語言。純粹的Lua是進行一些運算並向控制台輸出文本。本教程主要包括了如何使用Lua、Lua的語法,以及自帶的一些功能,還有MediaWiki中使用Lua模塊的方法。

使用Lua語言[編輯]

安裝使用[編輯]

搭建環境[編輯]

Lua安裝、源代碼可以在Lua官網(英文)下載。這需要使用C++語言,操作較為複雜。安裝方法可以參見官方網站(英文)。可以按照Lua官網上的集成方法,如lua.exe和luac.exe。以lua.exe為例,直接打開lua.exe可以進行交互式編程;或者設置環境變量,然後在命令行窗口中輸入lua進行交互式編程(按Ctrl+C可退出解釋器),或者輸入「lua 文件地址」運行Lua。文件地址可以從資源管理器選擇文件,然後拖動到cmd窗口。

以下是Lua的命令行窗口的交互式編程模擬圖:

Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio

> print"你好,世界!" 你好,世界!

>

直接用lua.exe打開lua文件也行,但是文件運行完成後就會立即關閉窗口(python也是如此)。因此可以使用io.read()while true do end使其不會運行結束。

使用第三方軟件[編輯]

LuaStudio軟件也比較適用,但是只支持Lua 5.1,版本太舊,並且只有30天試用期。破解版可以破解試用期,但是不穩定,易崩潰。其他可用於編輯Lua的軟件有Script.net、SciTE(但都只適用於較舊的版本),以及EmmyLua(基於其他的軟件,安裝困難,且有點吃內存)。推薦使用Subline Text

使用在線編輯運行[編輯]

此外也可以在網站上在線輸出,該網站使用的Lua通常是最新版的,需要開啟JavaScript(默認是開啟的),並且不需要安裝任何擴展組件。

輸出[編輯]

主頁面:Lua/輸出

Lua程序的基本內容,就是通過計算,將值輸出控制台上。這需要使用到自帶函數print()[註 1]

這是一個最簡單的Lua:

print"你好,世界!"

執行後,你將會在控制台上看見以下內容:

你好,世界!

有時,我們可以用類似於cmd窗口的格式運行Lua。這種稱為「交互式編程」。帶>號的表示輸入的內容,不帶>號的表示輸出的內容。這種方法往往更加及時,輸入一行即可執行一行。這種方法與使用Lua文件有些不同,例如可以直接在第一行加一個等號以表示輸出,或者連等號都不要,直接是表達式(僅限於較新版本的Lua)。如果一行是一個函數調用,不管函數進行什麼操作,只要它返回了值,就會顯示返回的值。

>"你好,世界!"
你好,世界!
>a="你好,世界!"
>print(a)
你好,世界!

變量及數據類型[編輯]

主頁面:Lua/變量、及Lua/數據類型

Lua的函數需要對數據進行運算,最後輸出文字。在運算過程中,我們可以給一些數據賦值(也叫創建變量)。這樣,我們可以在多處重複使用一個數據,並對數據進行複雜的運算。

相關定義[編輯]

例如,這個簡單的表達式:x=5。它的意思是給變量x賦值為5,或者說是將變量x的值(由nil)修改為5。

在這裡,x是標識符(也叫名稱),5是它的。等於號就是給數據賦值,它屬於一個操作

變量[編輯]

主頁面:Lua/變量

變量用不帶引號的英文字母、數字和下劃線表示,且不能以數字開頭,例如上面的x

對於一個表(下面會學到),它的域也屬於變量。具體請參見表段落

[編輯]

擁有數據類型。在計算中,軟件就會將它的值代入變量以進行計算。例如x變量的值為5,那麼x+1的值就是6(因此表達式也可以有值,這個值就是它的計算結果)。print(x+1)就會在控制台上輸出文字6。

全局變量與局部變量[編輯]

主頁面:Lua/全局變量與局部變量

變量分為全局變量、局部變量和表中的域。全局變量就是在整個Lua文件中賦值,在賦值後的任何地方都起效果。需要注意的是,Lua文件像JavaScript一樣,是從前往後按步驟計算。

局部變量是在某一個具有開始、結束的代碼塊中使用的,只在這個範圍中有效,超出這個範圍之後就是nil或者其他的全局或局部變量。

do
	local x=2
	print(x) -- 会输出2
end
print(x)

--會輸出nil

表的用法見表段落

類型[編輯]

主頁面:Lua/類型

Lua的變量的值有以下這些類型:空、布爾、數字、字符串、用戶自定義、函數、線程和表。MediaWiki中的Lua不能使用用戶自定義和線程,因此本書主要介紹幾種較主要的數據類型。

[編輯]

主頁面:Lua/類型/空

表示這個變量不存在(未創建或者已經刪除),我們用nil表示它。凡是不存在的變量都是nil。賦值(創建變量)的實質就是將變量的值由nil修改為存在的值,刪除變量的實質就是將變量的值由存在的值修改為nil。如果創建一個,那麼所有的沒有定義的域的值都會是nil。

數字[編輯]

主頁面:Lua/類型/數字

數字是描述一個大小的值,可正可負。數字又分為兩種:整數與浮點數。

布爾值[編輯]

主頁面:Lua/類型/布爾值

布爾值描述一個數據是真還是假,通常用表達式得出,可用true或false表示,並用於一些邏輯運算。需要注意,對於其他類型的值,在邏輯運算中,只有nil和false會視為假。

字符串[編輯]

主頁面:Lua/類型/字符串

字符串描述一行或多行文字。可以用"字符串內容"(半角雙引號圍住)、'字符串內容'(半角單引號圍住)、[[字符串內容]](兩層中括號)或[===[字符串內容]===](夾雜等號的中括號)表示。用引號表示的字符串可以使用"\n""\a"等轉義符號。

[編輯]

主頁面:Lua/類型/表

可以有規律地儲存多個值。每一個表都分為一個、多個或零個字段(field),字段包括鍵(key)值(value)

函數[編輯]

主頁面:Lua/類型/函數、及Lua/函數

函數是Lua的另一種數據,用於調用。

  1. io.write()等函數也是可用的

相關鏈接[編輯]