Lua環境搭建+Lua基本語法

前期準備:

搜索并下載安裝LuaForWindows,例:

安裝完成后開啟cmd窗口,輸入lua

出現版本號證明成功下載安裝?

使用Sublime Text編輯器編寫Lua

使用瀏覽器或CSDN搜索Sublime Text下載并安裝,安裝成功后打開編輯器,編輯界面如下圖:

打開專門存放Lua項目文件的文件夾:

在文件夾中新建本次要編寫代碼的文件:

編寫示例代碼并保存文件:

在Sublime Text編輯器中運行Lua代碼快捷鍵:Ctrl+B(彈出框選擇lua)?

在cmd中運行方式如下:

Lua回顧網站

? ? ? ? https://www.runoob.com/lua/lua-tutorial.html

語言執行方式

? ? ? ? 編譯型語言:代碼在運行前需要使用編譯器,先將程序源代碼編譯為可執行文件,再執行

? ? ? ? ? ? ? ? C/C++

? ? ? ? ? ? ? ? Java,C#

? ? ? ? ? ? ? ? Go,Objective-C

? ? ? ? 解釋型語言(腳本語言):需要提前安裝編程語言解析器,運行時使用解析器運行程序源代碼

? ? ? ? ? ? ? ? JavaScript(TypeScript)

? ? ? ? ? ? ? ? Python,PHP,Perl,Ruby

? ? ? ? ? ? ? ? SQL

? ? ? ? ? ? ? ? Lua

? ? ? ? ? ? ? ? 特點:運行才能調試,運行速度稍慢,開發速度快。

? ? ? ? 解析器安裝

? ? ? ? ? ? ? ? 解壓縮解析器(即前文提到的LuaForWindows

Lua是什么

? ? ? ? Lua是一種輕量小巧的腳本語言,用標準C語言編寫并以源代碼形式開放,其設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定制功能。

Lua特點

? ? ? ? 輕量級:它用標準C語言編寫并以源代碼形式開放,編譯后僅僅一百余K,可以很方便的嵌入別的程序里。

? ? ? ? 可擴展:Lua提供了非常易于使用的擴展接口和機制:由宿主語言(通常是C或C++)提供一部分功能,Lua可以使用它們,就像是本來就內置的功能一樣。

使用領域:

? ? ? ? 游戲行業(魔獸世界的插件,憤怒的小鳥)

? ? ? ? Web領域(Nginx功能開發)

? ? ? ? 嵌入式領域

使用方式

? ? ? ? 需要高性能的程序部分,使用(C/C++)實現。需要快速實現功能部分,使用Lua實現

國內游戲行業流行的Lua使用方式

? ? ? ? Cocos2D-X(Cocos):核心引擎使用C++實現,提供LuaBinding(API的Lua調用),

? ? ? ? 游戲邏輯開發部分可使用Lua開發(刀塔傳奇)

? ? ? ? Unity3D:使用如xLua插件(API的Lua調用),實現游戲核心代碼使用C#實現(打包時il2cpp,編譯為C++),游戲邏輯使用Lua開發(王者榮耀)

Lua語言基礎

? ? ? ? 環境安裝

? ? ? ? ? ? ? ? Mac:使用Homebrew安裝

? ? ? ? ? ? ? ? Windows:https://www.lua.org/download.html(或見前文)

編程方法

? ? ? ? 交互式編程

? ? ? ? 腳本式編程(將腳本的路徑,傳遞給編譯器)

Lua基本語法

? ? ? ? 注釋

? ? ? ? ? ? ? ? 單行,多行

? ? ? ? 變量

? ? ? ? ? ? ? ? 命名,內部全局變量,局部,全局

? ? ? ? 數據類型

? ? ? ? ? ? ? ? type()函數判斷類型

? ? ? ? ? ? ? ? nil? boolean? number? string? function? table

? ?部分示例代碼:

--//C#的單行注釋
--Lua的單行注釋
--[[/*  */C#的多行注釋
]]
--[[ Lua的多行注釋]]

?Lua變量與數據類型,字符串操作

--C#定義變量
--類型 變量名=變量值;
--例:string name="myName";--Lua會自動推導變量類型
--Lua可以不用寫分號,也可以編寫分號
--變量聲明
name="myName"--調用變量
--C# Debug.Log(); Console.WriteLine();
print(name)--內置變量
--特點:下劃線+大寫字母
--查看Lua的版本
print(_VERSION)--可以調用一個不存在的變量
--值是nil(相當于C#中的null)
print(id)--銷毀一個已經定義的變量
name=nil
print(name)--全局變量和局部變量
--data ="myData"   定義了一個全局變量
--一般開發中,輕易不會使用全局變量,因為全局變量可以被隨意更改,不安全,不穩定
local data="myData"  --定義了一個局部變量(data的作用域是當前文件)---------------------------------------------------------------------------數據類型--獲得的變量的類型,使用type()
local name="Unity"
--type()是函數結構,是一個代碼片段,可以重復調用執行,有參數有返回值
print(type(name))--獲得type()返回值的類型
-- type()返回值的類型是string
print(type(type(name)))--對一個沒有定義的變量獲取類型
print(type(bb))--判斷一個未定義的變量
print(type(bb)=="nil")--數字類型的數值
--C#中多種數字類型,被歸納到number數據類型中,例:
print(type(123))
print(type(1.25))--布爾類型的數值
--布爾有true和false
print(type(true))
--單引號字符串
print(type('LikeChar'))---------------------------------------------------------------------------單行定義字符串
local str1 = "abc"
local str2 = 'def'--多行定義字符串
--完全的還原字符串內部的定義結構,如換行符都是存儲的
local str3 = [[
one
two
]]--C#字符串拼接
-- str1 + str2
print(str1..str2)
--Lua對兩個字符串相加時,會將他們轉換成數字類型,轉換失敗會報錯,
--如果轉換成功,則進行加運算后,得到數字結果
print("1"+"2")--獲取字符串的長度
print(#str1)-------------------------------------------------------------------------
--字符串相關函數
--string.函數名
--字符串大寫化
print(string.upper(str1))
--字符串小寫化
print(string.lower(str1))--Lua支持多返回值
--字符串的下標是從1開始的!!!--字符串查找
--參數1:被查找的字符串,參數2:查找的內容
--返回值:起始找到的位置下標和結束找到的位置下標
print(string.find("abcdefg","cde"))--字符串的反轉
print(string.reverse("abcdefg"))--截取字符串
--方式1(提供起始位置下標,截取到結尾)
print(string.sub("abcdefg",3))
--方式2(提供起始位置下標,提供結束位置)  C#的第二個參數是截取長度
print(string.sub(3,5))--截取到倒數第二個字符
local data="abcdefghijk"
print(string.sub(data,3,#data-1))--字符串格式化
--參數1:需要被格式化的字符串,其中包含占位符,%d表示數字
--參數2:填入格式化字符串中的內容
print(string.format("I'm the %d player,she is the %d player",3,5))--字符串重復
--被重復的字符串
--重復的次數
print(string.rep("abc",2))--ASCII轉字符
print(string.char(65))
--字符轉ASCII
print(string.byte("A"))--字符串替換
--參數1:原始串,參數2:需要替換的內容,參數3:替換后的內容
--返回值:替換結果,替換的次數
print(string.gsub("abcd","bc","**"))

Lua數組

--數組初始化
--C# string[] data=new string[20];
local data = {}
--起始索引從1開始
--類型可以混合
--索引值可以為負數
--即使索引從1開始,也可以賦值0索引
--索引可以斷開
--初始化時,對于沒有索引的值,索引是從1向上累加的
--初始化提供索引的賦值方法,[索引值]=數值
data={"abc",123,[-1]=100,[0]=99,[4]=233}
print(data[-1])
--獲取數組的長度
--這種方式,獲得的是從1索引開始,索引連續的數據個數
--中間斷開,計數結束
print(#data)--修改某一個值
data[1]="def"
print(data[1])--數組在Lua中是用Table實現的
local data2={{"aa","bb"},{11,22}}
print(data2[2][1])

Lua運算符+判斷,循環語句

--2的3次方
print(2^3)--C#不等于"!="
print(2~=3)--Lua沒有++ --
local i=0
i = i + 1--Lua沒有+=,-=,*=--[[C#if(條件){條件達成的語句塊}
]]
local con1 = true
if(con1)
then print("條件1達成")
end--[[C#if(條件){條件達成的語句塊}else{否則達成的語句塊}
]]
if(false)
thenprint("條件1達成")
elseprint("else達成")
end--[[C#if(條件){條件達成的語句塊}else if{else if條件}else{否則達成的語句塊}
]]
if(false)
thenprint("條件1達成")
elseif(true)
thenprint("elseif達成")
elseprint("else達成")
end--[[C#if(條件){if(條件){//進入第二層條件}}
]]
if(true)
thenif(true)thenprint("進入第二層if")end
end--Lua沒有switch,所以可以使用if-elseif-else的結構代替--[[C#while(條件){循環制}
]]
local num=1
while(num<3)  --當條件滿足時,進入循環
do--local修飾的num,雖然是局部變量,但是作用域為當前文件,所以在循環體內,可以取得值print(num)num=num+1
end--[[C# do whiledo{循環體}while(條件)至少執行一次do結構體內的代碼,while條件滿足時,再do執行代碼
]]
local num=1
repeatprint(num)num=num+1
until(num>5) --直到條件滿足時,跳出循環-------------------------------------------------------------------------------------[[do{if(){break;}if(){break;}if(){break;}}while(false)
]]repeatif(true)thenprint("此處跳出")breakendif(true)thenprint("此2處跳出")end
until(true)
print("繼續執行")  local data={"aa","bb","cc","dd","ee"}
--參數1:變量i的初始值,遍歷Lua表,使用1
--參數2:增長到多少
--參數3:增長步長,默認值是1
for i=1,#data
doprint(data[i])
end--倒序遍歷
for i=#data,1,-1
do	print(data[i])
end--迭代器(遍歷table)
--one是不加中括號的字符串索引
--"aa" "bb"自動加1,2索引
--[4]指定數字索引
--[-1]指定負數索引
--["two"]是加中括號的字符串索引寫法
local data={one="cc","aa","bb",[4]=3,[-1]=4,["two"]="dd"}--連續索引數值迭代器
--迭代器就是指向table的指針,連續數字索引迭代器,
--只會獲取從1開始的數字索引,且必須索引是連續的才能持續獲得值
--此處的for結構,可以理解為C#的foreach結構
for k,v in ipairs(data)
doprint("k:"..k..",v:"..v)
endprint("-----------------------------")
--所有數值迭代器
--相對于ipairs,所有數值迭代器去掉了i,i可以理解為int,
--去掉int的迭代器,也就去掉了連續數值索引的限定
--獲取table長度的最穩定方法,就是使用所有數值迭代器獲取
for k,v in pairs(data)
doprint("k:"..k..",v:"..v)
end

該系列專欄為網課課程筆記,僅用于學習參考。

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

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

相關文章

FFmpeg錄制屏幕和音頻

一、FFmpeg命令行實現錄制屏幕和音頻 1、Windows 示例 #include <cstdlib> #include <string> #include <iostream>int main() {// FFmpeg 命令行&#xff08;錄制屏幕 麥克風音頻&#xff09;std::string command "ffmpeg -f gdigrab -framerate 3…

【數據集】多視圖文本數據集

多視圖文本數據集指的是包含多個不同類型或來源的信息的文本數據集。不同視圖可以來源于不同的數據模式&#xff08;如原始文本、元數據、網絡結構等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、詞嵌入、主題分布等&#xff09;。這些數據集常用于多…

C++ 繼承方式使用場景(極簡版)

1. 公有繼承&#xff08;public&#xff09; 什么時候用&#xff1f; “是一個”&#xff08;is-a&#xff09;關系&#xff1a;派生類 是 基類的一種。 例&#xff1a;class Dog : public Animal&#xff08;狗是動物&#xff09; 最常見&#xff0c;90%的繼承都用它。 2. 保…

Ubuntu 系統 Docker 中搭建 CUDA cuDNN 開發環境

CUDA 是 NVIDIA 推出的并行計算平臺和編程模型&#xff0c;利用 GPU 多核心架構加速計算任務&#xff0c;廣泛應用于深度學習、科學計算等領域。cuDNN 是基于 CUDA 的深度神經網絡加速庫&#xff0c;為深度學習框架提供高效卷積、池化等操作的優化實現&#xff0c;提升模型訓練…

高密度任務下的挑戰與破局:數字樣機助力火箭發射提效提質

2025年4月1日12時&#xff0c;在酒泉衛星發射中心&#xff0c;長征二號丁運載火箭順利升空&#xff0c;成功將一顆衛星互聯網技術試驗衛星送入預定軌道&#xff0c;發射任務圓滿完成。這是長征二號丁火箭的第97次發射&#xff0c;也是長征系列火箭的第567次發射。 執行本次任務…

關于SQL子查詢的使用策略

在 SQL 優化中&#xff0c;一般遵循**“非必要不使用子查詢”**的原則&#xff0c;因為子查詢可能會帶來額外的計算開銷&#xff0c;影響查詢效率。但是&#xff0c;并不是所有子查詢都需要避免&#xff0c;有時子查詢是最優解&#xff0c;具體要根據實際場景選擇合適的優化方式…

JavaEE初階復習(JVM篇)

JVM Java虛擬機 jdk java開發工具包 jre java運行時環境 jvm java虛擬機(解釋執行 java 字節碼) java作為一個半解釋,半編譯的語言,可以做到跨平臺. java 通過javac把.java文件>.class文件(字節碼文件) 字節碼文件, 包含的就是java字節碼, jvm把字節碼進行翻譯轉化為…

2.pycharm保姆級安裝教程

一、pycharm安裝 1.官網上下載好好軟&#xff0c;雙擊打開 2.下一步 3.修改路徑地址 (默認也可以) 4.打勾 5.安裝 不用重啟電腦 二、添加解釋器 1.雙擊軟件&#xff0c;打開 2.projects – new project 3.指定項目名字&#xff0c;項目保存地址&#xff0c;解釋器 4.右擊 – …

zk基礎—4.zk實現分布式功能二

大綱 1.zk實現數據發布訂閱 2.zk實現負載均衡 3.zk實現分布式命名服務 4.zk實現分布式協調(Master-Worker協同) 5.zk實現分布式通信 6.zk實現Master選舉 7.zk實現分布式鎖 8.zk實現分布式隊列和分布式屏障 4.zk實現分布式協調(Master-Worker協同) (1)Master-Worker架構…

Java 實現 字母異位詞分組

在這篇博客中&#xff0c;我們將詳細解析如何使用 Java 代碼來解決 字母異位詞分組這個經典的算法問題。我們會逐步分析代碼邏輯&#xff0c;并探討其時間復雜度及優化思路。 題目描述 給定一個字符串數組 strs&#xff0c;請將字母異位詞組合在一起。字母異位詞是指由相同字…

【Ragflow】10. 助理配置參數詳細解析/模型響應加速方法

概述 Ragflow的助理配置中&#xff0c;有很多參數&#xff0c;盡管官方文檔給出了一定程度的解釋&#xff0c;但不夠詳細。 本文將對各項參數進行更詳細的解釋說明&#xff0c;并進一步挖掘某些參數中隱含的潛在陷阱。 助理設置 空回復 含義&#xff1a;輸入的問題若未能在…

Mac Apple silicon如何指定運行amd64架構的ubuntu Docker?

如何指定運行amd64架構的ubuntu Docker 下面這個docker命令如何指定運行amd64架構的ubuntu Docker&#xff1f; docker run -it -v $(pwd):/workspace ubuntu:20.04 bash這個命令已經非常接近正確運行一個基于 amd64 架構的 Ubuntu 容器了&#xff0c;但如果你想明確指定運行…

ColPali:基于視覺語言模型的高效文檔檢索

摘要 文檔是視覺豐富的結構&#xff0c;不僅通過文本傳遞信息&#xff0c;還包括圖表、頁面布局、表格&#xff0c;甚至字體。然而&#xff0c;由于現代檢索系統主要依賴從文檔頁面中提取的文本信息來索引文檔&#xff08;通常是冗長且脆弱的流程&#xff09;&#xff0c;它們…

使用C++實現HTTP服務

天天開心&#xff01;&#xff01;&#xff01; 閱讀本篇文章之前&#xff0c;請先閱讀HTTP基礎知識 傳送門----> HTTP基礎知識 文章目錄 一、CWeb服務器&#xff08;核心代碼WebServer.cpp&#xff09;二、靜態文件結構三、編譯和運行四、訪問測試 一、CWeb服務器&#xff…

Reactive編程入門:Project Reactor 深度指南

文章目錄 4.2.1 創建 Flux 和 MonoFlux 基礎創建方式高級創建模式Mono 創建方式 4.2.2 訂閱與數據處理基礎訂閱模式數據處理操作符 4.2.3 核心操作符深度解析flatMap 操作符zip 操作符buffer 操作符 高級組合模式復雜流處理示例背壓處理策略 測試響應式流性能優化技巧 React 編…

【萬字總結】前端全方位性能優化指南(完結篇)——自適應優化系統、遺傳算法調參、Service Worker智能降級方案

前言 自適應進化宣言 當監控網絡精準定位病灶&#xff0c;真正的挑戰浮出水面&#xff1a;系統能否像生物般自主進化&#xff1f; 五維感知——通過設備傳感器實時捕獲環境指紋&#xff08;如地鐵隧道弱光環境自動切換省電渲染&#xff09; 基因調參——150個性能參數在遺傳算…

PQ以及有關索引的筆記Faiss: The Missing Manual

參考Faiss 索引結構總結&#xff1a; 為了加深記憶&#xff0c;介紹一下Inverted File Index&#xff08;IVF&#xff09;的名字由來&#xff1a; IVF索引的名字源自“倒排文件”&#xff08;Inverted File&#xff09;的概念。在傳統的信息檢索中&#xff0c;倒排文件是一種索…

win10徹底讓圖標不顯示在工具欄

關閉需要不顯示的軟件 打開 例此時我關閉了IDEA的顯示 如果說只是隱藏&#xff0c;鼠標拖動一個道理 例QQ 如果說全部顯示不隱藏

關稅核爆72小時!跨境矩陣防御戰緊急打響

一、T86崩塌&#xff1a;全球貿易鏈的至暗時刻 &#xff08;配圖&#xff1a;美國海關系統深夜彈出紅色警報&#xff09; 5月2日凌晨2:17&#xff0c;杭州某光伏企業的供應鏈系統突然發出刺耳警報——其價值1800萬美元的逆變器模塊被劃入34%關稅清單。這場代號"黑天鵝突…

藍橋杯Java B組省賽真題題型近6年統計分類

困難題 題號題型分值代碼量難度通過率內容2024-F解答1581困難0.12最短路問題 Dijkstra 期望2024-G解答20116困難0.19模擬 暴力 搜索 DFS 剪紙 枚舉2023-H解答2070困難0動態規劃2022-H解答20109困難0.032022-J解答25141困難0搜索2021-H解答2041困難0.18二分 思維 規律2021-I解答…