日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openresty开发系列12--lua介绍及常用数据类型简介

發(fā)布時(shí)間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openresty开发系列12--lua介绍及常用数据类型简介 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

openresty開發(fā)系列12--lua介紹及常用數(shù)據(jù)類型簡介

lua介紹
? 1993 年在巴西里約熱內(nèi)盧天主教大學(xué)(Pontifical Catholic University of Rio de Janeiro in Brazil)誕生了一門編程語言,發(fā)明者是該校的三位研究人員,他們給這門語言取了個(gè)浪漫的名字——Lua,在葡萄牙語里代表美麗的月亮。事實(shí)證明她沒有糟蹋這個(gè)優(yōu)美的單詞,Lua 語言正如它名字所預(yù)示的那樣成長為一門簡潔、優(yōu)雅且富有樂趣的語言。
? Lua 從一開始就是作為一門方便嵌入(其它應(yīng)用程序)并可擴(kuò)展的輕量級(jí)腳本語言來設(shè)計(jì)的,因此她一直遵從著簡單、小巧、可移植、快速的原則,官方實(shí)現(xiàn)完全采用 ANSI C 編寫,能以 C 程序庫的形式嵌入到宿主程序中。LuaJIT 2 和標(biāo)準(zhǔn) Lua 5.1 解釋器采用的是著名的 MIT 許可協(xié)議。正由于上述特點(diǎn),所以 Lua 在游戲開發(fā)、機(jī)器人控制、分布式應(yīng)用、圖像處理、生物信息學(xué)等各種各樣的領(lǐng)域中得到了越來越廣泛的應(yīng)用。其中尤以游戲開發(fā)為最,許多著名的游戲都有l(wèi)ua的身影
Lua 和 LuaJIT 的區(qū)別
? Lua 非常高效,它運(yùn)行得比許多其它腳本(如 Perl、Python、Ruby)都快,這點(diǎn)在第三方的獨(dú)立測評(píng)中得到了證實(shí)。盡管如此,仍然會(huì)有人不滿足,他們總覺得"嗯,還不夠快!"。LuaJIT 就是一個(gè)為了再榨出一些速度的嘗試,它利用即時(shí)編譯(Just-in Time)技術(shù)把 Lua 代碼編譯成本地機(jī)器碼后交由 CPU 直接執(zhí)行。LuaJIT 2 的測評(píng)報(bào)告表明,在數(shù)值運(yùn)算、循環(huán)與函數(shù)調(diào)用、協(xié)程切換、字符串操作等許多方面它的加速效果都很顯著。憑借著 FFI 特性,LuaJIT 2 在那些需要頻繁地調(diào)用外部 C/C++ 代碼的場景,也要比標(biāo)準(zhǔn) Lua 解釋器快很多。目前 LuaJIT 2 已經(jīng)支持包括 i386、x86_64、ARM、PowerPC 以及 MIPS 等多種不同的體系結(jié)構(gòu)。
? LuaJIT 是采用 C 和匯編語言編寫的 Lua 解釋器與即時(shí)編譯器。LuaJIT 被設(shè)計(jì)成全兼容標(biāo)準(zhǔn)的 Lua 5.1 語言,同時(shí)可選地支持 Lua 5.2 和 Lua 5.3 中的一些不破壞向后兼容性的有用特性。因此,標(biāo)準(zhǔn) Lua 語言的代碼可以不加修改地運(yùn)行在 LuaJIT 之上。LuaJIT 和標(biāo)準(zhǔn) Lua 解釋器的一大區(qū)別是,LuaJIT 的執(zhí)行速度,即使是其匯編編寫的 Lua 解釋器,也要比標(biāo)準(zhǔn) Lua 5.1 解釋器快很多,可以說是一個(gè)高效的 Lua 實(shí)現(xiàn)。另一個(gè)區(qū)別是,LuaJIT 支持比標(biāo)準(zhǔn) Lua 5.1 語言更多的基本原語和特性,因此功能上也要更加強(qiáng)大。
?
2)應(yīng)用場景

??? 1. 在很多時(shí)候,我們可以將Lua直接嵌入到我們的應(yīng)用程序中,如游戲、監(jiān)控服務(wù)器等。這樣的應(yīng)用方式對(duì)于程序的最終用戶而言是完全透明的,但是對(duì)于程序本身,其擴(kuò)展性將會(huì)得到極大的增強(qiáng)。
?? ?
  2. 將Lua視為一種獨(dú)立的腳本語言,通過它來幫助我們完成一些軟件產(chǎn)品的輔助性工具的開發(fā)。比如在我們之前的數(shù)據(jù)分析產(chǎn)品中,我們通過編寫Lua腳本,將每個(gè)用戶不同格式的數(shù)據(jù)重新格式化為我們的軟件平臺(tái)能夠讀取的格式,之后再將格式化的后的數(shù)據(jù)加載到數(shù)據(jù)庫中,或者是寫入我們的分析引擎可以識(shí)別的數(shù)據(jù)分析文件中。這其中Lua僅僅用于文件格式的規(guī)格化過程,至于此后的操作,都是通過Lua調(diào)用我們的C語言導(dǎo)出函數(shù)來完成的。
?? ?
  3. 將Lua應(yīng)用于應(yīng)用程序的動(dòng)態(tài)配置部分。比如移動(dòng)智能設(shè)備或嵌入式設(shè)備,它們的顯示分辨率在很多情況下都是非標(biāo)準(zhǔn)的,如果我們?yōu)槊恳豢钤O(shè)備都維護(hù)一套相關(guān)的配置信息,這無疑會(huì)加大我們程序的維護(hù)開銷,如果我們將這段動(dòng)態(tài)配置邏輯交由Lua腳本完成,那么這對(duì)于程序配置的靈活性而言,將會(huì)得到很大的提高。甚至可以是這樣,運(yùn)行在移動(dòng)終端設(shè)備上的應(yīng)用程序,在啟動(dòng)主窗體之前先和服務(wù)器建立連接,在服務(wù)器確認(rèn)設(shè)備的各種參數(shù)后,再將和該設(shè)備顯示相關(guān)的Lua腳本發(fā)送給設(shè)備客戶端,這樣客戶端在得到Lua腳本之后,就可以立刻執(zhí)行它以得到最新的動(dòng)態(tài)配置信息。

3)主要優(yōu)勢
1. 高效性:
  作為一種腳本語言,Lua的高效是眾所周知的,因此在實(shí)際應(yīng)用中,很多大型程序都會(huì)考慮將代碼中易變的部分用Lua來編寫。這不但沒有明顯降低系統(tǒng)的運(yùn)行效率,反而使程序的穩(wěn)定性和可擴(kuò)展性得到了顯著的提升。

  2. 可移植性:
  在官方網(wǎng)站中提供了基于多種平臺(tái)的發(fā)布包,如Linux/Unix、Windows、Symbian和Pocket PC等。
?? ?
  3. 可嵌入性:
  在語言設(shè)計(jì)之初,Lua就被準(zhǔn)確的定位為嵌入式腳本語言,因此Lua的設(shè)計(jì)者們?yōu)長ua提供了與其他編程語言之間的良好交互體驗(yàn),這特別體現(xiàn)在和C/C++之間的交互上。對(duì)于其他語言,如Java和C#,也可以將Lua作為其嵌入式腳本引擎,并在代碼中進(jìn)行直接的交互。
?? ?
  4. 簡單強(qiáng)大:
  盡管是過程化腳本語言,但由于Lua的設(shè)計(jì)者們?yōu)長ua提供了meta-mechanisms機(jī)制,這不僅使Lua具備了一些基本的面向?qū)ο筇卣?#xff0c;如對(duì)象和繼承,而且仍然保持了過程化語言所具有的語法簡單的特征。
?? ?
  5. 小巧輕便:
  在最新版本(5.2.0)的Lua中,僅僅包含了大約20000行的C語言代碼,編譯后的庫文件大小約為240K左右,因此這對(duì)于很多資源有限的平臺(tái)有著極強(qiáng)的吸引力。
?? ?
  6. 免費(fèi)開源:
  MIT Licence可以讓Lua被免費(fèi)的用于各種商業(yè)程序中。

lua的常用數(shù)據(jù)類型簡介

一)注釋單行注釋兩個(gè)減號(hào)是單行注釋: --注釋內(nèi)容多行注釋--[[多行注釋多行注釋--]]二)基本類型Lua中有8個(gè)基本類型分別為:nil(空) -----> java null(空)boolean(布爾)、 number(數(shù)字) 雙精度浮點(diǎn)數(shù) ---> java int double floatstring(字符串)table(表) ----> 類似 java mapfunction(函數(shù))、 userdata(自定義的類型)、 thread(線程/協(xié)程)使用type函數(shù)測試給定變量或者值的類型三)變量1)變量命名大小寫區(qū)分命名規(guī)則Lua 標(biāo)示符用于定義一個(gè)變量,函數(shù)獲取其他用戶定義的項(xiàng)。標(biāo)示符以一個(gè)字母 A 到 Z 或 a 到 z 或下劃線 _ 開頭后加上0個(gè)或多個(gè)字母,下劃線,數(shù)字(0到9)。_temp一般約定,以下劃線開頭連接一串大寫字母的名字(比如 _VERSION)被保留用于 Lua 內(nèi)部全局變量。關(guān)鍵詞:and break do elseelseif end false true forfunction if in localnil not or return then repeat untilwhile變量名字,它的大小寫是相關(guān)的。也就是說,A和a是兩個(gè)不同的變量定義一個(gè)變量的方法就是賦值。"="操作就是用來賦值的。2)全局變量在默認(rèn)情況下,變量總是認(rèn)為是全局的。除非,你在前面加上"local"。這一點(diǎn)要特別注意,因?yàn)槟憧赡芟朐诤瘮?shù)里使用局部變量,卻忘了用local來說明.全局變量不需要聲明,給一個(gè)變量賦值后即創(chuàng)建了這個(gè)全局變量,訪問一個(gè)沒有初始化的全局變量也不會(huì)出錯(cuò),只不過得到的結(jié)果是:nil。 > print(b)nil> b=10> print(b)10> 如果你想刪除一個(gè)全局變量,只需要將變量賦值為nil。b = nilprint(b) --> nil這樣變量b就好像從沒被使用過一樣。換句話說, 當(dāng)且僅當(dāng)一個(gè)變量不等于nil時(shí),這個(gè)變量即存在。3)局部變量變量名稱 前加修飾符 local四)nil類型> print(type(a))nil-------------------------對(duì)于全局變量和 table,nil 還有一個(gè)"刪除"作用,給全局變量或者 table 表里的變量賦一個(gè) nil 值,等同于把它們刪掉,執(zhí)行下面代碼就知:tab1 = { key1 = "val1", key2 = "val2" }for k, v in pairs(tab1) doprint(k .. " - " .. v)endprint('---------')tab1.key1 = nilfor k, v in pairs(tab1) doprint(k .. " - " .. v)end-----------------------------判斷nil類型 作比較時(shí)應(yīng)該加上雙引號(hào) "type(X) ---> 返回的類型 其實(shí)是string> type(X)==nilfalse> type(X)=="nil"true

?

轉(zhuǎn)載于:https://www.cnblogs.com/reblue520/p/11429487.html

總結(jié)

以上是生活随笔為你收集整理的openresty开发系列12--lua介绍及常用数据类型简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。