【lua】Lua 入門教程:從環境搭建到基礎編程

Lua 入門教程:從環境搭建到基礎編程

Lua 是一種輕量級、可擴展的腳本語言,廣泛應用于游戲開發(如《魔獸世界》《Roblox》)、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效,非常適合作為編程入門語言或輔助開發工具。本教程將帶您從零開始,逐步掌握 Lua 的核心基礎。

1?? 環境搭建:讓 Lua 跑起來

在開始編寫 Lua 代碼前,需先搭建運行環境,主要分為 “在線編輯器” 和 “本地安裝” 兩種方式,新手推薦優先使用在線編輯器快速體驗語法。

在線編輯器(文本編輯器)

推薦使用下面任意網站:

  • https://www.mycompiler.io/new/lua

  • https://onecompiler.com/lua/

  • https://www.tutorialspoint.com/compilers/online-lua-compiler.htm

打開網頁即可直接編寫和運行代碼,無需配置環境,適合快速測試小段代碼。

在線編輯器(交互式/Terminal)

  • https://www.tutorialspoint.com/compilers/online-lua-terminal.htm

本地安裝(Windows 系統為例)

  • 步驟 1:下載 Lua

訪問 Lua 官方網站(www.lua.org),進入 “Download” 頁面,然后找到LuaBinaries,下載適合 鏈接(如Lua 5.1.5 - Release 1)。
在這里插入圖片描述

然后在打開的頁面,選擇Tools Executables目錄
在這里插入圖片描述

最后選擇win64版本即可
在這里插入圖片描述

  • 步驟 2:解壓并配置環境變量

將壓縮包解壓到任意目錄(如D:\lua),打開 “此電腦”→右鍵 “屬性”→“高級系統設置”→“環境變量”,在 “系統變量” 的 “Path” 中添加D:\lua(解壓目錄路徑)。

然后創建文件lua5.1.exe的快捷方式,然后重命名為lua.exe,方便后續調用。

  • 步驟 3:驗證安裝

按下Win+R,輸入cmd打開命令提示符,輸入lua -v,若顯示如下內容,則安裝成功。
在這里插入圖片描述

編寫第一個 Lua 程序

無論是在線編輯器還是本地環境,新建后綴為.lua的文件(如hello.lua),輸入以下代碼:

編寫第一個 Lua 程序

無論是在線編輯器還是本地環境,新建一個后綴為.lua的文件(如hello.lua),輸入以下代碼:

-- 這是單行注釋(雙連字符開頭)
print("Hello, Lua!")  -- 打印內容到控制臺
  • 本地運行:打開命令提示符,進入文件所在目錄,輸入lua hello.lua,輸出 “Hello, Lua!”。

  • 在線運行:點擊編輯器 “Run” 按鈕,直接查看結果。

2?? 基礎語法:變量與數據類型

Lua 是動態類型語言,無需提前聲明變量類型,變量類型會根據賦值自動確定,核心包含 “變量聲明賦值” 和 “常用數據類型” 兩部分。

變量聲明與賦值

Lua 變量分為 “全局變量” 和 “局部變量”:

  • 全局變量:直接賦值即可(默認全局),如name = "Lua"age = 29
  • 局部變量:用local關鍵字聲明,僅在當前代碼塊(函數、循環)有效,推薦優先使用(避免全局變量污染),如local score = 95.5
  • 多變量賦值(Lua 特色語法):a, b, c = 10, "test", false,執行后a=10b="test"c=false,打印結果為10 test false
-- 全局變量
name = "Lua"
age = 29  -- Lua誕生于1993年-- 局部變量(推薦優先使用,避免全局變量污染)
local score = 95.5
local isUseful = true  -- 布爾值:true(真)或 false(假)-- 多變量賦值(Lua的特色語法)
a, b, c = 10, "test", false
print(a, b, c)  -- 輸出:10    test    false

常用數據類型

Lua 共 8 種數據類型,新手重點掌握以下 5 種,具體說明如下表:

類型說明示例
nil空值,表示變量未定義或為空x = nil
boolean布爾值,僅truefalseisOk = true
number數值(整數 / 浮點數,不區分)num1 = 20num2 = 3.14
string字符串(單 / 雙引號包裹)"Hello"'Lua'
table表(類似數組 / 字典,核心結構)arr = {1, 2, 3}
(1)字符串操作

字符串用..連接,用#獲取長度,示例:

str1 = "Hello"
str2 = "Lua"
-- 字符串連接
fullStr = str1 .. " " .. str2  -- 結果:"Hello Lua"
-- 獲取字符串長度
strLen = #fullStr  -- 結果:9("Hello Lua"共9個字符)
print(fullStr, strLen)  -- 輸出:Hello Lua    9
(2)表(table)基礎

表是 Lua 最靈活的數據結構,可當數組或字典使用:

  • 數組(索引從 1 開始):arr = {10, 20, 30}arr[1]=10arr[2]=20,打印arr[1]輸出10
  • 字典(鍵值對):person = {name = "Tom", age = 18},通過person.nameperson["name"]獲取值,打印person.name輸出Tom
  • 混合使用:mixTable = {"apple", "banana", price = 5.8}mixTable[2]="banana"mixTable.price=5.8,打印結果為banana 5.8
-- 1. 數組(索引從1開始,這是Lua與其他語言的區別)
arr = {10, 20, 30}  -- 索引1→10,索引2→20,索引3→30
print(arr[1])  -- 輸出:10(注意:不是arr[0])-- 2. 字典(鍵值對形式)
person = {name = "Tom",age = 18,score = 92
}
print(person.name)  -- 輸出:Tom(等價于person["name"])-- 3. 混合使用
mixTable = {"apple", "banana",  -- 數組部分:索引1→apple,索引2→bananaprice = 5.8,        -- 字典部分:鍵price→5.8count = 10
}
print(mixTable[2], mixTable.price)  -- 輸出:banana    5.8

3?? 流程控制:條件與循環

流程控制用于控制代碼執行順序,核心包含 “條件判斷(if-else)” 和 “循環(for、while)”,是實現邏輯分支與重復執行的關鍵。

條件判斷(if-else)

語法格式:

if 條件1 then-- 條件1為true時執行
elseif 條件2 then-- 條件1為false,條件2為true時執行
else-- 所有條件都為false時執行
end

示例(根據分數判斷等級):

local score = 85
if score >= 90 thenprint("優秀")
elseif score >= 80 thenprint("良好")
elseif score >= 60 thenprint("及格")
elseprint("不及格")
end
-- 輸出:良好

循環(for、while)

(1)for 循環(最常用)

分為 “數值 for 循環” 和 “泛型 for 循環”:

  • 數值 for 循環:for 變量=起始值,結束值,步長 do ... end(步長默認 1,可省略),示例 1(打印 1-5):
for i = 1, 5 doprint(i)  -- 輸出:1 2 3 4 5
end

示例 2(打印 10-2,步長 - 2):

for j = 10, 2, -2 doprint(j)  -- 輸出:10 8 6 4 2
end
  • 泛型 for 循環:用于遍歷表 / 字符串,需配合ipairs(遍歷數組),示例(遍歷數組):
arr = {"a", "b", "c"}
for index, value in ipairs(arr) doprint("索引:" .. index .. ",值:" .. value)
end

輸出:

索引:1,值:a

索引:2,值:b

索引:3,值:c

(2)while 循環

語法格式:while 條件 do ... end(條件為 true 時持續執行),示例(計算 1-10 的和):

local sum = 0
local i = 1while i <= 10 dosum = sum + i  -- 累加求和i = i + 1  -- 更新循環變量,避免無限循環
end
print("1到10的和:" .. sum)  -- 輸出:1到10的和:55

4?? 函數:代碼的復用與封裝

函數是可重復調用的代碼塊,用于封裝邏輯、提高復用性,Lua 中函數支持 “多返回值” 和 “匿名函數”,是代碼模塊化的核心。

函數定義與調用

語法格式:

function 函數名(參數1, 參數2, ...)-- 函數體return 返回值1, 返回值2, ...  -- 可選,支持多返回值
end

示例 1(計算兩數之和):

function add(a, b)local result = a + breturn result
endlocal total = add(5, 3)
print("5+3=" .. total)  -- 輸出:5+3=8

示例 2(返回多值:和與差):

function calculate(a, b)local sum = a + blocal diff = a - breturn sum, diff  -- 返回兩個值
ends, d = calculate(10, 4)
print("和:" .. s .. ",差:" .. d)  -- 輸出:和:14,差:6

匿名函數(進階)

匿名函數無函數名,通常作為參數傳遞給其他函數(如表遍歷、事件回調),示例(用匿名函數遍歷表):

arr = {1, 2, 3, 4}
-- table.foreach遍歷表,第二個參數為匿名函數
table.foreach(arr, function(index, value)print("索引" .. index .. ":" .. value \* 2)  -- 值乘以2后輸出
end)

輸出:

索引1:2

索引2:4

索引3:6

索引4:8

5?? 實戰小案例:簡易計算器

結合前面所學語法,實現支持 “加、減、乘、除” 的計算器,包含異常處理(除數為 0、不支持的運算符),鞏固核心知識點。

計算器代碼實現

-- 定義計算器函數
function calculator(num1, num2, op)local resultif op == "+" thenresult = num1 + num2elseif op == "-" thenresult = num1 - num2elseif op == "*" thenresult = num1 * num2elseif op == "/" then-- 處理除數為0的情況if num2 == 0 thenreturn "錯誤:除數不能為0"endresult = num1 / num2elsereturn "錯誤:不支持的運算符(僅支持+、-、*、/)"endreturn "計算結果:" .. num1 .. op .. num2 .. "=" .. result
end-- 測試計算器
print(calculator(10, 5, "+"))  -- 輸出:計算結果:10+5=15
print(calculator(20, 3, "-"))  -- 輸出:計算結果:20-3=17
print(calculator(6, 7, "*"))   -- 輸出:計算結果:6*7=42
print(calculator(10, 0, "/"))  -- 輸出:錯誤:除數不能為0
print(calculator(8, 2, "^"))   -- 輸出:錯誤:不支持的運算符(僅支持+、-、*、/)

6?? 學習資源推薦

  • 官方文檔:Lua 5.1 參考手冊(最權威的資料,建議常備);

  • 書籍:《Lua 程序設計(第 4 版)》(Lua 創始人編寫,適合深入學習);

  • 在線課程:Bilibili 搜索 “Lua 入門”,有大量免費視頻教程,適合視覺學習者。

  • Lua Demo

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95308.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95308.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95308.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL索引事務(未完成)

索引的相關操作1.查看索引show index from 表名;2.創建索引create index 索引名字 on 表名(列名);創建索引&#xff0c;是一個危險操作創建索引的時候&#xff0c;需要針對現有的數據&#xff0c;進行大規模的重新整理如果當前表是一個空表&#xff0c;或者數據不多&#xff0c…

Docker一鍵快速部署壓測工具,高效測試 API 接口性能

以下是對該壓測工具的簡單介紹&#xff1a; 這是一個簡易的在線壓測工具&#xff0c;可以對 API 接口/頁面、websocket服務等進行壓力測試&#xff0c;檢驗服務的并發能力使用 thinkphp ant design pro 構建&#xff0c;壓測能力驅動基于 wrk 、 php 多進程協程實現支持在線授…

前端緩存問題詳解

前端緩存是提升網頁性能和用戶體驗的重要手段&#xff0c;但也常導致資源更新不及時等問題。以下是關于前端緩存的核心知識點和解決方案&#xff1a; 一、緩存類型及工作原理HTTP緩存&#xff08;最核心&#xff09; 強緩存&#xff1a;直接從本地讀取&#xff0c;不請求服務器…

webpack升級

一、調研對比維度Webpack 4 狀態Webpack 5 改進與優勢構建速度較慢&#xff0c;增量構建效率低? 引入 持久化緩存&#xff08;filesystem cache&#xff09;&#xff0c;二次構建速度提升高達 90%Tree Shaking支持基礎 Tree Shaking&#xff0c;需手動配置? 更強的 Tree Shak…

Logstash數據遷移之es-to-kafka.conf詳細配置

在 Logstash 中配置從 Elasticsearch (ES) 讀取數據并輸出到 Kafka 是一個相對高級但強大的用法&#xff0c;通常用于數據遷移、重新索引、或構建新的數據管道。 下面我將詳細解釋配置文件的各個部分和細節。 核心配置文件結構 (es-to-kafka.conf) 一個完整的配置文件主要包含三…

在OracleLinux9.4系統上靜默滾動打補丁安裝Oracle19c

OracleLinux9.4系統 安裝Oracle19c 文章目錄OracleLinux9.4系統 安裝Oracle19c一、安裝準備1、yum安裝預檢查需要的包2、系統資源二、滾動安裝一、安裝準備 1、yum安裝預檢查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上傳圖片方案

創建上傳方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…

落葉清掃機器人cad+三維圖+設計說明書

摘 要 城市公共場所、校園等環境中&#xff0c;落葉的清掃一直是一個繁瑣而耗時的任務。傳統的人工清掃方式不僅效率低下&#xff0c;還存在人力浪費和安全隱患等問題。因此&#xff0c;研發一款能夠自主完成落葉清掃任務的機器人成為了當今研究的熱點之一。隨著科技的不斷進…

國別域名的SEO優勢:是否更利于在當地搜索引擎排名?

當你盯著搜索引擎結果頁發呆時&#xff0c;有沒有想過——憑什么那個.jp域名的網站能排在.ca前面&#xff1f;別扯什么內容質量&#xff0c;上周幫客戶優化新加坡市場時&#xff0c;親眼見著兩個內容相似度90%的頁面&#xff0c;.sg域名比.com.au在Google Singapore上高出3個排…

動態配置最佳實踐:Spring Boot 十種落地方式與回滾審計指南(含實操與避坑)

作為一名Spring Boot開發者&#xff0c;正在運維一個高可用微服務系統&#xff1a;業務需求變化頻繁&#xff0c;需要實時調整配置如數據庫連接或日志級別&#xff0c;但每次修改都得重啟應用&#xff0c;造成服務中斷和用戶投訴。這不是小麻煩&#xff0c;而是配置管理的痛點—…

vue社區網格化管理系統(代碼+數據庫+LW)

摘要 隨著城市化進程的加快&#xff0c;社區管理的復雜性逐漸增大&#xff0c;傳統的管理模式已無法滿足現代社區管理的需求。社區網格化管理系統作為一種新的管理模式&#xff0c;通過將社區劃分為多個網格單元&#xff0c;使得管理更加精細化、智能化和高效化。本論文基于Sp…

使用EasyExcel實現Excel單元格保護:自由鎖定表頭和數據行

使用EasyExcel實現Excel單元格保護&#xff1a;鎖定表頭和第二行數據 前言 在日常開發中&#xff0c;我們經常需要導出Excel文件&#xff0c;有時還需要對Excel中的某些單元格進行保護&#xff0c;防止用戶誤修改。本文將介紹如何使用EasyExcel 4.0.3實現鎖定Excel表頭和第二行…

dify docker知識庫topk最大值參數配置

1 問題說明 dify構建RAG知識庫過程中&#xff0c;通過會遇到一些默認配置不能解決的問題。 比如topk&#xff0c;topk默認最大10&#xff0c;對語義模糊的檢索&#xff0c;目標文檔可能沒進前10&#xff0c;出現在10-30區間。 所以&#xff0c;需要調整topk最大值參數。 # T…

SRE命令行兵器譜之一:精通top/htop - 從性能“體檢”到瓶頸“解剖”

SRE命令行兵器譜之一:精通top/htop - 從性能“體檢”到瓶頸“解剖” SRE的“戰場”:真實故障場景 下午三點,監控系統告警:“核心API服務響應時間(P99)飆升至5秒”。用戶已經開始在群里抱怨接口超時。這是一個典型的線上性能問題,每一秒的延遲都在影響用戶體驗和公司收…

一、Git與Gitee常見問題解答

Git與Gitee常見問題解答 Git相關問題 Q1: 什么是Git&#xff1f; A: Git是一個分布式版本控制系統&#xff0c;由Linux之父Linus Torvalds開發。它能夠跟蹤文件的變更歷史&#xff0c;支持多人協作開發&#xff0c;是現代軟件開發中不可或缺的工具。 Q2: Git的三個區域是什么&a…

kubernetes服務質量之QoS類

一、QoS類 Kubernetes的QoS&#xff08;Quality of Service&#xff09;類別允許您指定可用于應用程序的可用資源數量&#xff0c;以便更好地控制應用程序的可用性。它還允許您限制特定應用程序的資源使用率&#xff0c;以幫助保護系統的穩定性和性能。 Kubernetes 創建 Pod 時…

Redis--Lua腳本以及在SpringBoot中的使用

前言、為什么要用 Lua&#xff1f;多步操作合并為一步&#xff0c;保證原子性。減少網絡通信次數。下推邏輯到 Redis&#xff0c;提高性能。一、Redis 使用 Lua 腳本的兩種方式方式一&#xff1a;使用 --eval 執行腳本文件這種方式 需要先寫一個 Lua 文件。&#x1f4cc; 示例&…

基于 C 語言的網絡單詞查詢系統設計與實現(客戶端 + 服務器端)

一、項目概述本文將介紹一個基于 C 語言開發的網絡單詞查詢系統&#xff0c;該系統包含客戶端和服務器端兩部分&#xff0c;支持用戶注冊、登錄、單詞查詢及歷史記錄查詢等功能。系統采用 TCP socket 實現網絡通信&#xff0c;使用 SQLite 數據庫存儲用戶信息、單詞數據及查詢記…

《JAVA EE企業級應用開發》第一課筆記

《JAVA EE企業級應用開發》第一課筆記 文章目錄《JAVA EE企業級應用開發》第一課筆記課程主題&#xff1a;三層架構與SSM框架概述一、核心架構&#xff1a;三層架構 (MVC)1. 表現層 (Presentation Layer)2. 業務邏輯層 (Business Logic Layer)3. 數據持久層 (Data Persistence …

RT-DETR網絡結構

1.前言 本章主要來介紹下RT-DETR的網絡結構,參考的依舊是ultralytics實現的RT-DETR-L,代碼如下: ultralytics/ultralytics: Ultralytics YOLO ?? 首先談談我對RT-DETR的淺顯認識,他不像是YOLOv8這種純CNN實現的網絡,也不像是Vit這種以Transformer實現的網絡,他是前一…