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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

openresty开发系列15--lua基础语法4表table和运算符

發(fā)布時(shí)間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openresty开发系列15--lua基础语法4表table和运算符 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

openresty開發(fā)系列15--lua基礎(chǔ)語法4表table和運(yùn)算符

lua中的表table

一)table (表)
Table 類型實(shí)現(xiàn)了一種抽象的"關(guān)聯(lián)數(shù)組"。即可用作數(shù)組,也可以用作map。
lua中沒有數(shù)組和map,都是用table這個(gè)類型

--數(shù)組
java?? int[] intArr = new int[]{1,2,3,4,5,6};
intArr[0]
intArr[1]
--map----> key value

HashMap map
map.add(key,value)

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"
mytable[2]= "Lua2"
mytalbe["k1"] = v1;

-- 移除引用
mytable = nil
-- lua 垃圾回收會(huì)釋放內(nèi)存

lua類似數(shù)組的table ,索引值從1開始,,而不是0
mytable={1,2,3,4,5}
mytalbe[1]

mytable={"a","b","hello","world"}

mytable1 = {key1 = "v1",k2="v2",k3="v3"}

mytable2 = {"a",key1 = "v1","b",k2="v2",k3="v3","hello","world"}

print(mytable[1],mytable[2],mytable[3],mytable[4]);
print("------------------")
print(mytable1["key1"],mytable1["k2"],mytable1["k3"]);
print("------------------")
print(mytable2[1],mytable2["key1"],mytable2[2],mytable2["k2"],mytable2[3],mytable2[4]);

talbe?? key可以為 number 或字符串,,也可以是其他類型

table 是內(nèi)存地址 賦值給變量

二)table進(jìn)行賦值給變量,其實(shí)是把內(nèi)存地址給了變量,變量只是引用了內(nèi)存地址

local mytable1 = {"a",key1 = "v1","b",k2="v2",k3="v3","hello","world"}

local mytable2 =? mytable1

mytable2[1] = "aa"

print(mytable2[1])

print(mytable1[1])

mytable2 = nil? --移除的是引用

print("-------------")
print(mytable1[1])

內(nèi)存指針--》C++

lua算數(shù)運(yùn)算符


一)算術(shù)運(yùn)算符

+?? ?加法?? ?
-?? ?減法?? ?
*?? ?乘法?? ?
/?? ?除法?? ?
%?? ?取余?? ?
^?? ?乘冪?? ?
-?? ?負(fù)號(hào)

print(1 + 2)?????? -->打印 3
print(5 / 10)????? -->打印 0.5。 這是Lua不同于c語言的
print(5.0 / 10)??? -->打印 0.5。 浮點(diǎn)數(shù)相除的結(jié)果是浮點(diǎn)數(shù)
-- print(10 / 0)?? -->注意除數(shù)不能為0,計(jì)算的結(jié)果會(huì)出錯(cuò)
print(2 ^ 10)????? -->打印 1024。 求2的10次方

local num = 1357
print(num % 2)?????? -->打印 1
print((num % 2) == 1) -->打印 true。 判斷num是否為奇數(shù)
print((num % 5) == 0)? -->打印 false。判斷num是否能被5整數(shù)


二)關(guān)系運(yùn)算符

==?? ?等于,檢測(cè)兩個(gè)值是否相等,相等返回 true,否則返回 false?? ?
~=?? ?不等于,檢測(cè)兩個(gè)值是否相等,相等返回 false,否則返回 true?? ?不想java !=,,~=
>?? ?大于,如果左邊的值大于右邊的值,返回 true,否則返回 false?? ?
<?? ?小于,如果左邊的值大于右邊的值,返回 false,否則返回 true?? ?
>=?? ?大于等于,如果左邊的值大于等于右邊的值,返回 true,否則返回 false?? ?
<=?? ?小于等于, 如果左邊的值小于等于右邊的值,返回 true,否則返回 false

print(1 < 2)??? -->打印 true
print(1 == 2)?? -->打印 false
print(1 ~= 2)?? -->打印 true
local a, b = true, false
print(a == b)? -->打印 false

注意:table, userdate 和函數(shù);判斷的是引用地址的判斷
local a = { x = 1, y = 0}
local b = { x = 1, y = 0}
if a == b then
? print("a==b")
else
? print("a~=b")
end

三)邏輯運(yùn)算符
and?? ?邏輯與操作符。(A and B) 若 A 為 假,則返回 A,否則返回 B
or?? ?邏輯或操作符。(A or B) 若 A 為 真,則返回 A,否則返回 B
not?? ?邏輯非操作符。與邏輯運(yùn)算結(jié)果相反,如果條件為 true,邏輯非為 false。 永遠(yuǎn)只返回 true 或者 false

local c = nil
local d = 0
local e = 100

print(c and d)? -->打印 nil
print(c and e)? -->打印 nil
print(d and e)? -->打印 100

print(c or d)?? -->打印 0
print(c or e)?? -->打印 100
print(d or e)?? -->打印 0

print(not c)??? -->打印 true
print(not d)??? -->打印 false

短路取值 原理
and? 與,,,if(a and b and c)

a and b and c?? a為真,b為真,c為真? 返回c
??????????????? a為真,b為假,c為真? 返回b
??????????????? a為假 bc不管bc為什么值? 返回a

??????????????? 一路去判斷變量值是否為真,一旦遇到某個(gè)變量為假,就立刻短路返回 返回值就是 假的變量值

a or b or c???? 一路判斷變量值是否為真,一但遇到某個(gè)變量為真,就立刻短路返回,返回值就是 真的變量值
?? ??? ??? ??? ?a為真,bc??? 返回a

?? ??? ??? ??? ?a為假,b為真,不管c是什么值 返回b



四)其他運(yùn)算符
..?? ?連接兩個(gè)字符串?? ?a..b ,其中 a 為 "Hello " , b 為 "World", 輸出結(jié)果為 "Hello World"。
#?? ?一元運(yùn)算符,返回字符串或表的長(zhǎng)度。 #"Hello" 返回 5


很多字符串連接 我們?nèi)绻捎?.這個(gè)運(yùn)算符 ,性能是很低


推薦使用 table 和 table.concat() 來進(jìn)行很多字符串的拼接


五)優(yōu)先級(jí)
^
not ? #?-
* ? / ? %
+ ? -
..
<?>?<=? >= ?==? ~=
and
or
------------------------
local a, b = 1, 2
local x, y = 3, 4
local i = 10
local res = 0
res = a + i < b/2 + 1? -->等價(jià)于res =? (a + i) < ((b/2) + 1)
res = 5 + x^2*8??????? -->等價(jià)于res =? 5 + ((x^2) * 8)
res = a < y and y <=x? -->等價(jià)于res =? (a < y) and (y <= x)

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

總結(jié)

以上是生活随笔為你收集整理的openresty开发系列15--lua基础语法4表table和运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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